LearningContentController.java 44.7 KB
Newer Older
liqin's avatar
liqin committed
1
package cn.chnmuseum.party.web.controller;
liqin's avatar
liqin committed
2

liqin's avatar
liqin committed
3 4 5 6 7 8 9
import cn.chnmuseum.party.common.enums.AuditOperationEnum;
import cn.chnmuseum.party.common.enums.AuditStatusEnum;
import cn.chnmuseum.party.common.enums.AuditTypeEnum;
import cn.chnmuseum.party.common.enums.FileCatEnum;
import cn.chnmuseum.party.common.log.MethodLog;
import cn.chnmuseum.party.common.log.OperModule;
import cn.chnmuseum.party.common.log.OperType;
10
import cn.chnmuseum.party.common.util.ListUtil;
liqin's avatar
liqin committed
11 12 13 14 15
import cn.chnmuseum.party.common.validator.groups.Add;
import cn.chnmuseum.party.common.validator.groups.Update;
import cn.chnmuseum.party.common.vo.GenericPageParam;
import cn.chnmuseum.party.model.*;
import cn.chnmuseum.party.service.*;
16
import cn.chnmuseum.party.vo.AssetVo;
liqin's avatar
liqin committed
17
import cn.chnmuseum.party.web.controller.base.BaseController;
18
import cn.hutool.core.collection.CollectionUtil;
liqin's avatar
liqin committed
19
import com.alibaba.fastjson.JSONObject;
20
import com.baomidou.mybatisplus.core.conditions.Wrapper;
liqin's avatar
liqin committed
21
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
liqin's avatar
liqin committed
22
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
23
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
liqin's avatar
liqin committed
24 25 26 27 28 29 30 31
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
wzp's avatar
wzp committed
32
import org.apache.shiro.authz.annotation.RequiresAuthentication;
33
import org.springframework.beans.factory.annotation.Autowired;
34
import org.springframework.transaction.annotation.Transactional;
35
import org.springframework.util.CollectionUtils;
liqin's avatar
liqin committed
36 37 38 39
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
40
import java.util.*;
liqin's avatar
liqin committed
41
import java.util.stream.Collectors;
liqin's avatar
liqin committed
42 43

/**
liqin's avatar
liqin committed
44
 * <pre>
liqin's avatar
liqin committed
45
 * 学习内容 前端控制器
liqin's avatar
liqin committed
46
 * </pre>
liqin's avatar
liqin committed
47 48
 *
 * @author Danny Lee
liqin's avatar
liqin committed
49
 * @since 2021-03-26
liqin's avatar
liqin committed
50
 */
liqin's avatar
liqin committed
51
@Slf4j
liqin's avatar
liqin committed
52
@RestController
liqin's avatar
liqin committed
53 54
@RequestMapping("/learningContent")
@Api(tags = {"学习内容操作接口"})
liqin's avatar
liqin committed
55 56
public class LearningContentController extends BaseController {

liqin's avatar
liqin committed
57 58 59
    @Resource
    private ExhibitionBoardCatService exhibitionBoardCatService;
    @Resource
liqin's avatar
liqin committed
60
    private VideoContentService videoContentService;
liqin's avatar
liqin committed
61 62
    @Resource
    private CopyrightOwnerService copyrightOwnerService;
liqin's avatar
liqin committed
63 64
    @Resource
    private LearningContentService learningContentService;
liqin's avatar
liqin committed
65 66 67 68 69
    @Resource
    private LearningContentBoardCatService learningContentBoardCatService;
    @Resource
    private LearningContentBoardService learningContentBoardService;
    @Resource
liqin's avatar
liqin committed
70 71
    private ExhibitionBoardService exhibitionBoardService;
    @Resource
liqin's avatar
liqin committed
72
    private LearningContentCopyrightOwnerService learningContentCopyrightOwnerService;
liqin's avatar
liqin committed
73 74
    @Resource
    private LearningProjectService learningProjectService;
liqin's avatar
liqin committed
75 76
    @Resource
    private AuditService auditService;
liqin's avatar
liqin committed
77 78
    @Resource
    private AssetService assetService;
79
    @Autowired
80
    TOrganService organService;
liqin's avatar
liqin committed
81

82 83 84
    @Resource
    private LearningContentAssetService learningContentAssetService;

liqin's avatar
liqin committed
85
    @PostMapping("/save")
wzp's avatar
wzp committed
86
    @RequiresAuthentication  //@RequiresPermissions("learning:content:save")
liqin's avatar
liqin committed
87
    @ApiOperation(value = "添加学习内容", notes = "添加学习内容")
wzp's avatar
wzp committed
88
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.ADD)
89
    @Transactional
90
    public Map<String, Object> saveLearningContent(@Validated(value = {Add.class}) LearningContent learningContent, Boolean isMajor) {
wzp's avatar
wzp committed
91 92 93 94 95 96
        TUser tUser1 = getcurUser();
        if ("1".equals(tUser1.getType())){
            learningContent.setCreateType(1);
        }else {
            learningContent.setCreateType(2);
        }
liqin's avatar
liqin committed
97 98 99 100 101 102
        final LambdaQueryWrapper<LearningContent> lambdaQueryWrapper = Wrappers.<LearningContent>lambdaQuery().eq(LearningContent::getName, learningContent.getName().trim());
        final int count = this.learningContentService.count(lambdaQueryWrapper);
        if (count > 0) {
            return getFailResult("400", "名称已存在,请修改名称");
        }

liqin's avatar
liqin committed
103
        final TUser tUser = getcurUser();
liqin's avatar
liqin committed
104
        if (tUser != null) {
liqin's avatar
liqin committed
105
            learningContent.setOrganCode(tUser.getOrgCode());
liqin's avatar
liqin committed
106
        }
107 108 109 110 111 112 113 114
        //
        boolean nonUnitRole = !isUnitRole(tUser);
        if (nonUnitRole){
            learningContent.setAuditStatus(AuditStatusEnum.TBC.name());
        }else {
            //是单位管理员直接变成通过
            learningContent.setAuditStatus(AuditStatusEnum.APPROVED_FINAL.name());
        }
liqin's avatar
liqin committed
115
        learningContent.setPublished(false);
liqin's avatar
liqin committed
116 117 118
        QueryWrapper<LearningContent> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("max(sortorder) as sortorder");
        LearningContent content = this.learningContentService.getOne(queryWrapper);
liqin's avatar
liqin committed
119
        if (content != null && content.getSortorder() != null) {
liqin's avatar
liqin committed
120 121 122 123
            learningContent.setSortorder(content.getSortorder() + 1);
        } else {
            learningContent.setSortorder(1);
        }
124 125 126 127 128 129
        // 如果isMajor为null则新建学习内容为子学习内容
        if (isMajor == null) {
            learningContent.setIsMajor(false);
        }else {
            learningContent.setIsMajor(true);
        }
liqin's avatar
liqin committed
130 131
        // 保存业务节点信息
        boolean result = learningContentService.save(learningContent);
liqin's avatar
liqin committed
132
        final String learningContentId = learningContent.getId();
liqin's avatar
liqin committed
133

liqin's avatar
liqin committed
134 135 136 137 138
        final List<String> exhibitionBoardCatIdList = learningContent.getExhibitionBoardCatIdList();
        for (String exhibitionBoardCatId : exhibitionBoardCatIdList) {
            LearningContentBoardCat learningContentBoardCat = LearningContentBoardCat.builder().exhibitionBoardCatId(exhibitionBoardCatId).learningContentId(learningContentId).build();
            this.learningContentBoardCatService.save(learningContentBoardCat);
        }
liqin's avatar
liqin committed
139

liqin's avatar
liqin committed
140 141 142 143 144
        final List<String> copyrightOwnerIdList = learningContent.getCopyrightOwnerIdList();
        for (String copyrightOwnerId : copyrightOwnerIdList) {
            LearningContentCopyrightOwner contentCopyrightOwner = LearningContentCopyrightOwner.builder().copyrightOwnerId(copyrightOwnerId).learningContentId(learningContentId).build();
            this.learningContentCopyrightOwnerService.save(contentCopyrightOwner);
        }
liqin's avatar
liqin committed
145

liqin's avatar
liqin committed
146 147
        final List<String> exhibitionBoardIdList = learningContent.getExhibitionBoardIdList();
        for (String exhibitionBoardId : exhibitionBoardIdList) {
liqin's avatar
liqin committed
148 149 150 151 152
            LearningContentBoard learningContentBoard = LearningContentBoard.builder()
                    .learningContentId(learningContentId)
                    .exhibitionBoardCatId(this.exhibitionBoardService.getById(exhibitionBoardId).getExhibitionBoardCatId())
                    .exhibitionBoardId(exhibitionBoardId)
                    .build();
liqin's avatar
liqin committed
153
            QueryWrapper<LearningContentBoard> learningContentBoardQueryWrapper = new QueryWrapper<>();
liqin's avatar
liqin committed
154
            learningContentBoardQueryWrapper.select("max(sortorder) as sortorder");
liqin's avatar
liqin committed
155
            LearningContentBoard one = this.learningContentBoardService.getOne(learningContentBoardQueryWrapper);
liqin's avatar
liqin committed
156
            if (one != null && one.getSortorder() != null) {
157 158
//                learningContent.setSortorder(one.getSortorder() + 1);
                learningContentBoard.setSortorder(one.getSortorder() + 1);
liqin's avatar
liqin committed
159
            } else {
160 161
//                learningContent.setSortorder(1);
                learningContentBoard.setSortorder(1);
liqin's avatar
liqin committed
162
            }
liqin's avatar
liqin committed
163 164
            this.learningContentBoardService.save(learningContentBoard);
        }
liqin's avatar
liqin committed
165

166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
        // 保存需要在app端显示的参考资料
        List<String> fileList = learningContent.getFileList();
        if (!CollectionUtils.isEmpty(fileList)) {
            List<LearningContentAsset> learningContentAssets = new ArrayList<>();
            List<Asset> assets = this.assetService.listByIds(fileList);
            assets.forEach(asset -> {
                LearningContentAsset learningContentAsset = LearningContentAsset.builder()
                        .learningContentId(learningContentId)
                        .boardId(asset.getRefItemId())
                        .assetId(asset.getId())
                        .build();
                learningContentAssets.add(learningContentAsset);
            });
            boolean b = this.learningContentAssetService.saveBatch(learningContentAssets);
            if (!b) {
                return getFailResult("添加数据失败!");
            }
        }

liqin's avatar
liqin committed
185
        // 返回操作结果
186
        if (result && nonUnitRole) {
liqin's avatar
liqin committed
187 188
            final Audit audit = Audit.builder()
                    .content(learningContent.getName())
liqin's avatar
liqin committed
189
                    .name(learningContent.getName())
liqin's avatar
liqin committed
190
                    .refItemId(learningContent.getId())
liqin's avatar
liqin committed
191
                    .type(AuditTypeEnum.LEARNING_CONTENT.name())
wzp's avatar
wzp committed
192
                    .userId(tUser.getId())
liqin's avatar
liqin committed
193
                    .organId(tUser.getOrgId())
liqin's avatar
liqin committed
194
                    .operation(AuditOperationEnum.ADD.name())
liqin's avatar
liqin committed
195
                    .status(AuditStatusEnum.TBC.name())
liqin's avatar
liqin committed
196 197
                    .level(AuditStatusEnum.TBC.name())
                    .build();
liqin's avatar
liqin committed
198
            this.auditService.save(audit);
liqin's avatar
liqin committed
199
            return getSuccessResult();
200 201
        } else if (result) {
            return getSuccessResult();
liqin's avatar
liqin committed
202 203 204 205 206 207
        } else {
            // 保存失败
            return getFailResult();
        }
    }

208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
    /**
     * 判断是否为单位管理员
     *
     * @param tUser
     * @return
     */
    private boolean isUnitRole(TUser tUser) {
        boolean result = false;
        if (tUser != null) {
            List<String> roleList = tUser.getRoleList();
            if (!CollectionUtils.isEmpty(roleList)) {
                //单位管理员角色id为2
                result = roleList.contains("2");
            }
        }
        return result;
    }

liqin's avatar
liqin committed
226
    @PutMapping("/update")
wzp's avatar
wzp committed
227
    @RequiresAuthentication  //@RequiresPermissions("learning:content:update")
liqin's avatar
liqin committed
228
    @ApiOperation(value = "修改学习内容信息", notes = "修改学习内容信息")
wzp's avatar
wzp committed
229
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.UPDATE)
230
    @Transactional
liqin's avatar
liqin committed
231
    public Map<String, Object> updateLearningContent(@Validated(value = {Update.class}) LearningContent learningContent) {
liqin's avatar
liqin committed
232 233 234 235 236 237
        final LambdaQueryWrapper<LearningContent> lambdaQueryWrapper = Wrappers.<LearningContent>lambdaQuery().eq(LearningContent::getName, learningContent.getName().trim());
        lambdaQueryWrapper.ne(LearningContent::getId, learningContent.getId());
        final int count = this.learningContentService.count(lambdaQueryWrapper);
        if (count > 0) {
            return getFailResult("400", "名称已存在,请修改名称");
        }
liqin's avatar
liqin committed
238

liqin's avatar
liqin committed
239
        final LearningContent one = this.learningContentService.getById(learningContent.getId());
240 241 242 243 244 245 246 247 248 249

        //单位管理员只能修改所属机构及其子机构下的的学习内容
        List<String> curUserSubOrgIds = getCurUserSubOrgIds();
        if (!CollectionUtils.isEmpty(curUserSubOrgIds)){
            String organCode = one.getOrganCode();
            boolean contains = curUserSubOrgIds.contains(organCode);
            if (!contains){
                return getFailResult("单位管理员只能修改所属机构及其子机构的学习内容");
            }
        }
250

liqin's avatar
liqin committed
251 252 253
        one.setAuditStatus(AuditStatusEnum.TBC.name());
        this.learningContentService.updateById(one);

liqin's avatar
liqin committed
254
        final TUser tUser = getcurUser();
liqin's avatar
liqin committed
255 256 257
        final Audit audit = Audit.builder()
                .content(learningContent.getName())
                .name(learningContent.getName())
liqin's avatar
liqin committed
258 259
                .userId(tUser.getId())
                .organId(tUser.getOrgId())
liqin's avatar
liqin committed
260 261 262 263 264 265 266 267 268
                .refItemId(learningContent.getId())
                .type(AuditTypeEnum.LEARNING_CONTENT.name())
                .operation(AuditOperationEnum.EDIT.name())
                .status(AuditStatusEnum.TBC.name())
                .level(AuditStatusEnum.TBC.name())
                .modelData(JSONObject.toJSONString(learningContent))
                .build();
        this.auditService.save(audit);
        return getSuccessResult();
liqin's avatar
liqin committed
269 270 271
    }

    @GetMapping("/getList")
wzp's avatar
wzp committed
272
    @RequiresAuthentication  //@RequiresPermissions("learning:content:list")
liqin's avatar
liqin committed
273 274
    @ApiOperation(value = "获取学习内容全部列表(无分页)", notes = "获取学习内容全部列表(无分页)")
    @ApiImplicitParams(value = {
liqin's avatar
liqin committed
275 276
            @ApiImplicitParam(name = "auditStatus", value = "审核状态", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "learningProjectId", value = "学习项目ID", paramType = "query", dataType = "String")
liqin's avatar
liqin committed
277
    })
wzp's avatar
wzp committed
278
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.SELECT)
liqin's avatar
liqin committed
279 280
    public Map<String, Object> getLearningContentList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FINAL", required = false) AuditStatusEnum auditStatus,
                                                      @RequestParam(value = "learningProjectId", required = false) String learningProjectId) {
liqin's avatar
liqin committed
281 282
        final LambdaQueryWrapper<LearningContent> lambdaQueryWrapper = Wrappers.<LearningContent>lambdaQuery().eq(LearningContent::getAuditStatus, auditStatus.name());
        lambdaQueryWrapper.eq(LearningContent::getPublished, true);
liqin's avatar
liqin committed
283 284 285
        if (StringUtils.isNotBlank(learningProjectId)) {
            lambdaQueryWrapper.eq(LearningContent::getLearningProjectId, learningProjectId);
        }
wzp's avatar
wzp committed
286
        List<LearningContent> learningContentList = learningContentService.list(lambdaQueryWrapper);
liqin's avatar
liqin committed
287 288 289
        return getResult(learningContentList);
    }

liqin's avatar
liqin committed
290 291 292
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
liqin's avatar
liqin committed
293
            @ApiImplicitParam(name = "learningProjectId", value = "学习项目ID", paramType = "query", dataType = "String"),
liqin's avatar
liqin committed
294 295 296 297
            @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
    })
liqin's avatar
liqin committed
298
    @PostMapping("/getPageList")
wzp's avatar
wzp committed
299
    @RequiresAuthentication  //@RequiresPermissions("learning:content:page")
liqin's avatar
liqin committed
300
    @ApiOperation(value = "获取学习内容分页列表", notes = "获取学习内容分页列表")
wzp's avatar
wzp committed
301
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.SELECT)
liqin's avatar
liqin committed
302
    public Map<String, Object> getLearningContentPageList(GenericPageParam genericPageParam, @RequestParam(value = "learningProjectId", required = false) String learningProjectId) {
liqin's avatar
liqin committed
303
        LambdaQueryWrapper<LearningContent> queryWrapper = new LambdaQueryWrapper<>();
304 305
        // 分页查询这里不包括主学习内容
        queryWrapper.eq(LearningContent::getIsMajor, false);
306
        // 上级机构
307
//        List<String> curUserParOrgIds = getCurUserParOrgIds();
308 309

        // 下级机构展板
310 311
        List<String> curUserSubOrgIds = getCurUserSubOrgIds();
        if (!CollectionUtils.isEmpty(curUserSubOrgIds)){
312
            List<String> list = Arrays.asList("ALL_PLAT");
313
            queryWrapper.and(s -> {
314 315 316 317 318 319 320 321 322
//                if (CollectionUtil.isEmpty(curUserParOrgIds)){
//                s.in(LearningContent::getOrganCode, curUserSubOrgIds)
//                        .or().in(LearningContent::getApplicableScope, list);
//                }else{
//                    s.in(LearningContent::getOrganCode, curUserSubOrgIds)
//                            .or().in(LearningContent::getApplicableScope, list)
//                            .or(q ->q.in(LearningContent::getOrganCode, curUserParOrgIds)
//                                    .eq(LearningContent::getApplicableScope,"THIS_ORGAN_SUB"));
//                }
323
                    s.in(LearningContent::getOrganCode, curUserSubOrgIds)
324
                            .or().in(LearningContent::getApplicableScope, list);
325
            });
nie'hong's avatar
nie'hong committed
326

327
        }
nie'hong's avatar
nie'hong committed
328

liqin's avatar
liqin committed
329 330 331 332
        // 根据创建时间区间检索
        if (genericPageParam.getIsPublished() != null) {
            queryWrapper.eq(LearningContent::getPublished, genericPageParam.getIsPublished());
        }
liqin's avatar
liqin committed
333
        // 对名称或编码模糊查询
liqin's avatar
liqin committed
334
        if (StringUtils.isNotBlank(learningProjectId)) {
liqin's avatar
liqin committed
335
            queryWrapper.eq(LearningContent::getLearningProjectId, learningProjectId);
liqin's avatar
liqin committed
336 337
        }
        // 对名称或编码模糊查询
liqin's avatar
liqin committed
338 339 340 341 342 343 344 345 346
        if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
            queryWrapper.like(LearningContent::getName, genericPageParam.getNameOrCode());
        }
        // 根据创建时间区间检索
        if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
            queryWrapper.ge(LearningContent::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
                    .le(LearningContent::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
        }
        // 设置排序规则
liqin's avatar
liqin committed
347
        queryWrapper.orderByDesc(LearningContent::getSortorder);
liqin's avatar
liqin committed
348 349 350 351
        // 设置查询内容
        queryWrapper.select(
                LearningContent::getId,
                LearningContent::getName,
liqin's avatar
liqin committed
352
                LearningContent::getApplicableScope,
liqin's avatar
liqin committed
353
                LearningContent::getCreatorName,
liqin's avatar
liqin committed
354
                LearningContent::getAuditStatus,
liqin's avatar
liqin committed
355
                LearningContent::getPublished,
liqin's avatar
liqin committed
356 357
                LearningContent::getDeleted,
                LearningContent::getSortorder,
liqin's avatar
liqin committed
358
                LearningContent::getCreateTime,
wzp's avatar
wzp committed
359
                LearningContent::getCreateType,
liqin's avatar
liqin committed
360 361 362
                LearningContent::getUpdateTime);
        Page<LearningContent> page = this.learningContentService.page(getPage(), queryWrapper);
        for (LearningContent learningContent : page.getRecords()) {
363 364 365 366 367
            LambdaQueryWrapper<LearningContentBoard> lambdaQueryWrapper = Wrappers.<LearningContentBoard>lambdaQuery()
                    .select(LearningContentBoard::getExhibitionBoardId)
                    .eq(LearningContentBoard::getLearningContentId, learningContent.getId());
//            int exhibitionBoardCount = this.learningContentBoardService.count(lambdaQueryWrapper);
            List<String> exhibitionBoardIds = learningContentBoardService.listObjs(lambdaQueryWrapper, Object::toString);
368
            LambdaQueryWrapper<ExhibitionBoard> ExhibitionBoardIn = Wrappers.<ExhibitionBoard>lambdaQuery().in(ExhibitionBoard::getId, exhibitionBoardIds).eq(ExhibitionBoard::getPublished,true);
369 370 371
            int count = exhibitionBoardService.count(ExhibitionBoardIn);
//            learningContent.setExhibitionBoardCount(exhibitionBoardCount);
            learningContent.setExhibitionBoardCount(count);
liqin's avatar
liqin committed
372 373 374 375 376 377 378 379 380 381 382 383 384 385

//            LambdaQueryWrapper<LearningContentBoardCat> boardCatLambdaQueryWrapper = Wrappers.<LearningContentBoardCat>lambdaQuery().eq(LearningContentBoardCat::getLearningContentId, learningContent.getId());
//            boardCatLambdaQueryWrapper.select(LearningContentBoardCat::getExhibitionBoardCatId);
//            List<String> exhibitionBoardCatIdList = this.learningContentBoardCatService.listObjs(boardCatLambdaQueryWrapper, Object::toString);
//            List<ExhibitionBoardCat> exhibitionBoardCatList = this.exhibitionBoardCatService.listByIds(exhibitionBoardCatIdList);
//            String exhibitionBoardCatNames = exhibitionBoardCatList.stream().map(ExhibitionBoardCat::getName).collect(Collectors.joining("、"));
//            learningContent.setExhibitionBoardCatNames(exhibitionBoardCatNames);
//
//            LambdaQueryWrapper<LearningContentCopyrightOwner> copyrightOwnerLambdaQueryWrapper = Wrappers.<LearningContentCopyrightOwner>lambdaQuery().eq(LearningContentCopyrightOwner::getLearningContentId, learningContent.getId());
//            copyrightOwnerLambdaQueryWrapper.select(LearningContentCopyrightOwner::getCopyrightOwnerId);
//             List<String> copyrightOwnerIdList = this.learningContentCopyrightOwnerService.listObjs(copyrightOwnerLambdaQueryWrapper, Object::toString);
//            List<CopyrightOwner> copyrightOwnerList = this.copyrightOwnerService.listByIds(copyrightOwnerIdList);
//            String copyrightOwnerNames = copyrightOwnerList.stream().map(CopyrightOwner::getName).collect(Collectors.joining("、"));
//            learningContent.setCopyrightOwnerNames(copyrightOwnerNames);
386
//            learningContent.setExhibitionBoardCount(exhibitionBoardCount);
liqin's avatar
liqin committed
387 388
        }
        return getResult(page);
liqin's avatar
liqin committed
389 390
    }

391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412
    /**
     *  获取当前用户的上级机构
     */
    public List<String> getCurUserParOrgIds() {
        TUser tUser = getcurUser();

        // 上级机构
        List<String> parGranCode = new ArrayList<>();
        String orgId = tUser.getOrgId();

        TOrgan tOrgan = this.organService.getById(orgId);
        if (!"0".equals(tOrgan.getParentId())) {
            TOrgan tOrgan1 = this.organService.getById(tOrgan.getParentId());
            parGranCode.add(tOrgan1.getCode());
            if (!"0".equals(tOrgan1.getParentId())) {
                TOrgan tOrgan2 = this.organService.getById(tOrgan1.getParentId());
                parGranCode.add(tOrgan2.getCode());
            }
        }
        return parGranCode;
    }

413 414 415 416 417 418 419 420 421 422
    /**
     * 获取当前用户的所有子机构
     *
     * @return
     */
    public List<String> getCurUserSubOrgIds() {
        TUser tUser = getcurUser();
        if (tUser == null || StringUtils.isBlank(tUser.getOrgId())) {
            return null;
        }
423
        //平台管理员、单位管理员、学习内容管理员  单位管理员不能看到其它非同一机构的单位管理员
424 425 426 427 428 429
        List<String> roleList = tUser.getRoleList();
        boolean condition = !CollectionUtils.isEmpty(roleList)   //不为空
                && roleList.contains("2")      //2是单位管理员
                && !roleList.contains("1")        //不包含 1是平台管理员
                && !roleList.contains("8");       //不包含  8是学习内容管理员

430 431
        //不是只为单位管理员这种情况查询全部
//        userRoleService
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
        if (!condition) {
            return null;
        }
        String orgId = tUser.getOrgId();
        LambdaQueryWrapper<TOrgan> wrapper = new QueryWrapper<TOrgan>().lambda()
                .select(TOrgan::getId, TOrgan::getParentId, TOrgan::getCode)
                .eq(TOrgan::getIsDeleted, false);

        List<TOrgan> tOrgans = organService.list(wrapper);
        ArrayList<String> strings = new ArrayList<>();
        strings.add(orgId);
        List<String> result = new ArrayList<>();
        List<String> code = tOrgans.stream().filter(a -> a.getId().equals(orgId)).map(TOrgan::getCode).collect(Collectors.toList());
        if (code != null && code.size() >= 1) {
            result.add(code.get(0));
        }
        treeCode(strings, tOrgans, result);
        return result;
    }

    private void treeCode(List<String> parentCodes, List<TOrgan> all, List<String> codes) {
        if (CollectionUtils.isEmpty(parentCodes)) {
            return;
        }
        ArrayList<String> idArray = new ArrayList<>();
        parentCodes.stream().forEach(s -> {
            List<TOrgan> subOrgans = all.stream().filter(a -> a.getParentId() != null && a.getParentId().equals(s)).collect(Collectors.toList());
            subOrgans.stream().forEach(sub -> {
                String code = sub.getCode();
                String id = sub.getId();
                codes.add(code);
                idArray.add(id);
            });
        });
        //递归查询
        treeCode(idArray, all, codes);
    }

liqin's avatar
liqin committed
470 471 472 473 474
    @ApiOperation(value = "获取学习内容详情", notes = "获取学习内容详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
    })
    @GetMapping("/get/{id}")
wzp's avatar
wzp committed
475
    @RequiresAuthentication  //@RequiresPermissions("learning:content:get:id")
wzp's avatar
wzp committed
476
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.SELECT)
liqin's avatar
liqin committed
477
    public Map<String, Object> getById(@PathVariable("id") String id) {
liqin's avatar
liqin committed
478
        LearningContent learningContent = learningContentService.getById(id);
liqin's avatar
liqin committed
479

liqin's avatar
liqin committed
480 481 482 483
        LearningProject learningProject = this.learningProjectService.getById(learningContent.getLearningProjectId());
        if (learningProject != null) {
            learningContent.setLearningProjectName(learningProject.getName());
        }
liqin's avatar
liqin committed
484

liqin's avatar
liqin committed
485 486 487
        final LambdaQueryWrapper<LearningContentBoardCat> queryWrapper = Wrappers.<LearningContentBoardCat>lambdaQuery().eq(LearningContentBoardCat::getLearningContentId, id);
        queryWrapper.select(LearningContentBoardCat::getExhibitionBoardCatId);
        final List<String> exhibitionBoardCatIdList = this.learningContentBoardCatService.listObjs(queryWrapper, Object::toString);
liqin's avatar
liqin committed
488 489
        if (!exhibitionBoardCatIdList.isEmpty()) {
            final List<ExhibitionBoardCat> exhibitionBoardCats = this.exhibitionBoardCatService.listByIds(exhibitionBoardCatIdList);
liqin's avatar
liqin committed
490 491 492
            learningContent.setExhibitionBoardCatIdList(exhibitionBoardCats.stream().map(ExhibitionBoardCat::getId).collect(Collectors.toList()));
            learningContent.setExhibitionBoardCatNameList(exhibitionBoardCats.stream().map(ExhibitionBoardCat::getName).collect(Collectors.toList()));
        }
liqin's avatar
liqin committed
493 494 495 496

        final LambdaQueryWrapper<LearningContentCopyrightOwner> queryWrapper1 = Wrappers.<LearningContentCopyrightOwner>lambdaQuery().eq(LearningContentCopyrightOwner::getLearningContentId, id);
        queryWrapper1.select(LearningContentCopyrightOwner::getCopyrightOwnerId);
        final List<String> copyrightOwnerIdList = this.learningContentCopyrightOwnerService.listObjs(queryWrapper1, Object::toString);
liqin's avatar
liqin committed
497 498
        if (!copyrightOwnerIdList.isEmpty()) {
            final List<CopyrightOwner> copyrightOwnerList = this.copyrightOwnerService.listByIds(copyrightOwnerIdList);
liqin's avatar
liqin committed
499 500 501
            learningContent.setCopyrightOwnerIdList(copyrightOwnerList.stream().map(CopyrightOwner::getId).collect(Collectors.toList()));
            learningContent.setCopyrightOwnerNameList(copyrightOwnerList.stream().map(CopyrightOwner::getName).collect(Collectors.toList()));
        }
liqin's avatar
liqin committed
502 503

        final LambdaQueryWrapper<LearningContentBoard> queryWrapper2 = Wrappers.<LearningContentBoard>lambdaQuery().eq(LearningContentBoard::getLearningContentId, id);
504 505 506 507 508 509
        queryWrapper2.select(LearningContentBoard::getExhibitionBoardId,LearningContentBoard::getSortorder)
                .orderByAsc(LearningContentBoard::getSortorder);
        final List<LearningContentBoard> exhibitionBoardIdListNew = this.learningContentBoardService.list(queryWrapper2);
        final List<String> exhibitionBoardIdList = exhibitionBoardIdListNew.stream().map(LearningContentBoard::getExhibitionBoardId).collect(Collectors.toList());

//        final List<String> exhibitionBoardIdList = this.learningContentBoardService.listObjs(queryWrapper2, Object::toString);
liqin's avatar
liqin committed
510
        if (!exhibitionBoardIdList.isEmpty()) {
511 512 513 514
            LambdaQueryWrapper<ExhibitionBoard> lambdaQuery = Wrappers.lambdaQuery();
            lambdaQuery.ne(ExhibitionBoard::getPublished, false);
            lambdaQuery.in(ExhibitionBoard::getId, exhibitionBoardIdList);
            List<ExhibitionBoard> exhibitionBoardList = this.exhibitionBoardService.list(lambdaQuery);
515 516 517 518 519 520 521 522
            //设置sortorder ,然后在排序
            exhibitionBoardList.stream().forEach(eb -> {
                exhibitionBoardIdListNew.stream().forEach(lcb -> {
                    if (eb.getId().equals(lcb.getExhibitionBoardId())) {
                        eb.setSortorder(lcb.getSortorder());
                    }
                });
            });
523
            exhibitionBoardList = exhibitionBoardList.stream().sorted(Comparator.comparing(ExhibitionBoard::getSortorder).reversed()).collect(Collectors.toList());
524

liqin's avatar
liqin committed
525
            if (!exhibitionBoardList.isEmpty()) {
526 527
                learningContent.setExhibitionBoardIdList(exhibitionBoardList.stream().sorted(Comparator.comparing(ExhibitionBoard::getSortorder).reversed()).map(ExhibitionBoard::getId).collect(Collectors.toList()));
                learningContent.setExhibitionBoardNameList(exhibitionBoardList.stream().sorted(Comparator.comparing(ExhibitionBoard::getSortorder).reversed()).map(ExhibitionBoard::getName).collect(Collectors.toList()));
liqin's avatar
liqin committed
528
            }
liqin's avatar
liqin committed
529 530 531

            for (ExhibitionBoard exhibitionBoard : exhibitionBoardList) {
                String exhibitionBoardCatId = exhibitionBoard.getExhibitionBoardCatId();
532
                if (StringUtils.isNotEmpty(exhibitionBoardCatId)) {
liqin's avatar
liqin committed
533 534 535
                    exhibitionBoard.setExhibitionBoardCatName(this.exhibitionBoardCatService.getById(exhibitionBoardCatId).getName());
                }
                String boardCopyrightOwnerId = exhibitionBoard.getBoardCopyrightOwnerId();
536
                if (StringUtils.isNotEmpty(boardCopyrightOwnerId)) {
liqin's avatar
liqin committed
537 538 539 540 541
                    final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(boardCopyrightOwnerId);
                    if (copyrightOwner != null) {
                        exhibitionBoard.setBoardCopyrightOwnerName(copyrightOwner.getName());
                    }
                }
542
                if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId())) {
liqin's avatar
liqin committed
543 544 545 546 547 548
                    String name = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()).getName();
                    exhibitionBoard.setVideoContentCopyrightOwnerName(name);
                }

                LambdaQueryWrapper<Asset> assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
                assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_AUDIO.name());
549
                assetQueryWrapper.eq(Asset::getPublished, true);
liqin's avatar
liqin committed
550 551 552 553 554 555
                final List<Asset> audioList = this.assetService.list(assetQueryWrapper);
                exhibitionBoard.setAudioList(audioList);

                assetQueryWrapper.clear();
                assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
                assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_DATUM.name());
556
                assetQueryWrapper.eq(Asset::getPublished, true);
liqin's avatar
liqin committed
557 558 559 560
                final List<Asset> datumList = this.assetService.list(assetQueryWrapper);
                exhibitionBoard.setDatumList(datumList);

                String videoContentId = exhibitionBoard.getVideoContentId();
561
                if (StringUtils.isNotEmpty(videoContentId)) {
liqin's avatar
liqin committed
562 563 564 565 566
                    final VideoContent videoContent = this.videoContentService.getOne(Wrappers.<VideoContent>lambdaQuery().eq(VideoContent::getId, videoContentId));
                    if (videoContent != null) {
                        assetQueryWrapper.clear();
                        assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId);
                        assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name());
567
                        assetQueryWrapper.eq(Asset::getPublished, true);
liqin's avatar
liqin committed
568 569 570 571 572 573 574 575
                        final List<Asset> videoList = this.assetService.list(assetQueryWrapper);
                        exhibitionBoard.setVideoList(videoList);
                        exhibitionBoard.setVideoContentName(videoContent.getName());
                    }
                }
            }
            learningContent.setExhibitionBoardList(exhibitionBoardList);
        }
576 577 578 579
        // 查询该学习内容下哪些展板参考资料在app展示
        LambdaQueryWrapper<LearningContentAsset> lambdaQueryWrapper = Wrappers.<LearningContentAsset>lambdaQuery().eq(LearningContentAsset::getLearningContentId, id);
        lambdaQueryWrapper.select(LearningContentAsset::getAssetId);
        List<String> list = this.learningContentAssetService.listObjs(lambdaQueryWrapper, Object::toString);
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594
        if (CollectionUtil.isNotEmpty(list)) {
            List<Asset> assets = this.assetService.listByIds(list);
            List<AssetVo> assetVos = new ArrayList<>();
            for (Asset asset : assets) {
                ExhibitionBoard board = this.exhibitionBoardService.getById(asset.getRefItemId());
                AssetVo assetVo =  AssetVo.builder()
                        .id(asset.getId())
                        .fileName(asset.getFileName())
                        .fileType(asset.getFileExtName())
                        .boardName(board.getName())
                        .build();
                assetVos.add(assetVo);
            }
            learningContent.setAssetList(assetVos);
        }
595
        learningContent.setFileList(list);
liqin's avatar
liqin committed
596 597 598 599 600 601 602 603 604 605

        final LambdaQueryWrapper<Audit> auditQueryWrapper = Wrappers.<Audit>lambdaQuery().eq(Audit::getRefItemId, id);
        final List<Audit> auditList = this.auditService.list(auditQueryWrapper);
        learningContent.setAuditHistoryList(auditList);

        return getResult(learningContent);
    }

    @ApiOperation(value = "获取学习内容详情(审核详情使用)", notes = "获取学习内容详情(审核详情使用)")
    @ApiImplicitParams({
liqin's avatar
liqin committed
606
            @ApiImplicitParam(name = "auditId", value = "审核ID", dataType = "String", paramType = "path")
liqin's avatar
liqin committed
607
    })
liqin's avatar
liqin committed
608
    @GetMapping("/getAudit/{auditId}")
liqin's avatar
liqin committed
609 610 611 612 613 614 615 616 617 618
    @RequiresAuthentication  //@RequiresPermissions("learning:content:get:id")
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.SELECT)
    public Map<String, Object> getAuditInfoById(@PathVariable("auditId") String auditId) {
        final LearningContent learningContent = JSONObject.parseObject(this.auditService.getById(auditId).getModelData(), LearningContent.class);
        String id = learningContent.getId();
        LearningProject learningProject = this.learningProjectService.getById(learningContent.getLearningProjectId());
        if (learningProject != null) {
            learningContent.setLearningProjectName(learningProject.getName());
        }

619
        // 学习内容的展板版权方
liqin's avatar
liqin committed
620 621
        final List<String> copyrightOwnerIdList = learningContent.getCopyrightOwnerIdList();
        if (copyrightOwnerIdList != null && !copyrightOwnerIdList.isEmpty()) {
liqin's avatar
liqin committed
622
            final List<CopyrightOwner> copyrightOwnerList = this.copyrightOwnerService.listByIds(copyrightOwnerIdList);
liqin's avatar
liqin committed
623
            learningContent.setCopyrightOwnerIdList(copyrightOwnerIdList);
liqin's avatar
liqin committed
624 625 626
            learningContent.setCopyrightOwnerNameList(copyrightOwnerList.stream().map(CopyrightOwner::getName).collect(Collectors.toList()));
        }

627
        // 学习内容的展板分类
liqin's avatar
liqin committed
628 629 630 631 632 633 634
        final List<String> exhibitionBoardCatIdList = learningContent.getExhibitionBoardCatIdList();
        if (exhibitionBoardCatIdList != null && !exhibitionBoardCatIdList.isEmpty()) {
            final List<ExhibitionBoardCat> exhibitionBoardCats = this.exhibitionBoardCatService.listByIds(exhibitionBoardCatIdList);
            learningContent.setExhibitionBoardCatIdList(exhibitionBoardCatIdList);
            learningContent.setExhibitionBoardCatNameList(exhibitionBoardCats.stream().map(ExhibitionBoardCat::getName).collect(Collectors.toList()));
        }

635
        // 学习内容的展板列表
liqin's avatar
liqin committed
636
        final List<String> exhibitionBoardIdList = learningContent.getExhibitionBoardIdList();
liqin's avatar
liqin committed
637
        if (exhibitionBoardIdList != null && !exhibitionBoardIdList.isEmpty()) {
liqin's avatar
liqin committed
638 639
            final List<ExhibitionBoard> exhibitionBoardList = this.exhibitionBoardService.listByIds(exhibitionBoardIdList);
            if (!exhibitionBoardList.isEmpty()) {
liqin's avatar
liqin committed
640
                learningContent.setExhibitionBoardIdList(exhibitionBoardIdList);
liqin's avatar
liqin committed
641 642 643 644 645 646
                learningContent.setExhibitionBoardNameList(exhibitionBoardList.stream().map(ExhibitionBoard::getName).collect(Collectors.toList()));
            }

            for (ExhibitionBoard exhibitionBoard : exhibitionBoardList) {
                String exhibitionBoardCatId = exhibitionBoard.getExhibitionBoardCatId();
                if (exhibitionBoardCatId != null) {
liqin's avatar
liqin committed
647 648 649
                    exhibitionBoard.setExhibitionBoardCatName(this.exhibitionBoardCatService.getById(exhibitionBoardCatId).getName());
                }
                String boardCopyrightOwnerId = exhibitionBoard.getBoardCopyrightOwnerId();
650
                if (StringUtils.isNotEmpty(boardCopyrightOwnerId )) {
liqin's avatar
liqin committed
651 652 653 654
                    final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(boardCopyrightOwnerId);
                    if (copyrightOwner != null) {
                        exhibitionBoard.setBoardCopyrightOwnerName(copyrightOwner.getName());
                    }
liqin's avatar
liqin committed
655
                }
656
                if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId() )) {
liqin's avatar
liqin committed
657 658 659 660 661
                    String name = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()).getName();
                    exhibitionBoard.setVideoContentCopyrightOwnerName(name);
                }

                LambdaQueryWrapper<Asset> assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
liqin's avatar
liqin committed
662
                assetQueryWrapper.eq(Asset::getPublished, true);
liqin's avatar
liqin committed
663 664 665 666 667 668
                assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_AUDIO.name());
                final List<Asset> audioList = this.assetService.list(assetQueryWrapper);
                exhibitionBoard.setAudioList(audioList);

                assetQueryWrapper.clear();
                assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
liqin's avatar
liqin committed
669
                assetQueryWrapper.eq(Asset::getPublished, true);
liqin's avatar
liqin committed
670 671 672 673 674
                assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_DATUM.name());
                final List<Asset> datumList = this.assetService.list(assetQueryWrapper);
                exhibitionBoard.setDatumList(datumList);

                String videoContentId = exhibitionBoard.getVideoContentId();
675
                if (StringUtils.isNotEmpty(videoContentId)) {
liqin's avatar
liqin committed
676 677 678 679
                    final VideoContent videoContent = this.videoContentService.getOne(Wrappers.<VideoContent>lambdaQuery().eq(VideoContent::getId, videoContentId));
                    if (videoContent != null) {
                        assetQueryWrapper.clear();
                        assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId);
liqin's avatar
liqin committed
680
                        assetQueryWrapper.eq(Asset::getPublished, true);
liqin's avatar
liqin committed
681 682 683 684 685
                        assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name());
                        final List<Asset> videoList = this.assetService.list(assetQueryWrapper);
                        exhibitionBoard.setVideoList(videoList);
                        exhibitionBoard.setVideoContentName(videoContent.getName());
                    }
liqin's avatar
liqin committed
686 687 688 689
                }
            }
            learningContent.setExhibitionBoardList(exhibitionBoardList);
        }
liqin's avatar
liqin committed
690 691 692 693
        final LambdaQueryWrapper<Audit> auditQueryWrapper = Wrappers.<Audit>lambdaQuery().eq(Audit::getRefItemId, id);
        final List<Audit> auditList = this.auditService.list(auditQueryWrapper);
        learningContent.setAuditHistoryList(auditList);

liqin's avatar
liqin committed
694
        return getResult(learningContent);
liqin's avatar
liqin committed
695 696
    }

liqin's avatar
liqin committed
697 698 699 700 701 702 703
    /**
     * 通用排序方法(拖拽排序/所有排序完成后点击保存)
     *
     * @param sourceId 源实体ID
     * @param targetId 目标实体ID
     * @return Void
     */
liqin's avatar
liqin committed
704 705
    @ApiOperation(value = "学习内容排序")
    @PutMapping(value = "/sort")
wzp's avatar
wzp committed
706
    @RequiresAuthentication  //@RequiresPermissions("learning:content:sort")
liqin's avatar
liqin committed
707
    public Map<String, Object> updateSortorder(String sourceId, String targetId) {
liqin's avatar
liqin committed
708 709
        LearningContent theSource = this.learningContentService.getById(sourceId);
        LearningContent theTarget = this.learningContentService.getById(targetId);
liqin's avatar
liqin committed
710
        String moveType = theSource.getSortorder() > theTarget.getSortorder() ? "down" : "up";
liqin's avatar
liqin committed
711 712 713 714 715 716 717 718 719 720 721 722 723 724 725
        Integer sourceSortorder = theSource.getSortorder();
        Integer targetSortorder = theTarget.getSortorder();

        //默认sortorder为降序排序,向上移动
        if ("up".equalsIgnoreCase(moveType) && sourceSortorder < targetSortorder) {
            QueryWrapper<LearningContent> wrapper = new QueryWrapper<>();
            wrapper.between("sortorder", sourceSortorder, targetSortorder);
            wrapper.select("id", "sortorder");
            List<LearningContent> list = this.learningContentService.list(wrapper);
            for (LearningContent entity : list) {
                if (!entity.getId().equals(sourceId)) {
                    entity.setSortorder(entity.getSortorder() - 1);
                    this.learningContentService.updateById(entity);
                }
            }
liqin's avatar
liqin committed
726 727
            theSource.setSortorder(targetSortorder);
            this.learningContentService.updateById(theSource);
liqin's avatar
liqin committed
728 729 730 731 732 733 734 735 736 737 738 739 740
        }
        //默认sortorder为降序排序,向下移动
        else if ("down".equalsIgnoreCase(moveType) && sourceSortorder > targetSortorder) {
            QueryWrapper<LearningContent> wrapper = new QueryWrapper<>();
            wrapper.between("sortorder", targetSortorder, sourceSortorder);
            wrapper.select("id", "sortorder");
            List<LearningContent> slideList = this.learningContentService.list(wrapper);
            for (LearningContent entity : slideList) {
                if (!entity.getId().equals(sourceId)) {
                    entity.setSortorder(entity.getSortorder() + 1);
                    this.learningContentService.updateById(entity);
                }
            }
liqin's avatar
liqin committed
741 742
            theSource.setSortorder(targetSortorder);
            this.learningContentService.updateById(theSource);
liqin's avatar
liqin committed
743 744 745 746 747 748 749 750 751 752 753 754 755
        }
        //默认sortorder为正序排序,向下移动
        else if ("down".equalsIgnoreCase(moveType) && sourceSortorder < targetSortorder) {
            QueryWrapper<LearningContent> wrapper = new QueryWrapper<>();
            wrapper.between("sortorder", sourceSortorder, targetSortorder);
            wrapper.select("id", "sortorder");
            List<LearningContent> slideList = this.learningContentService.list(wrapper);
            for (LearningContent slide : slideList) {
                if (!slide.getId().equals(sourceId)) {
                    slide.setSortorder(slide.getSortorder() - 1);
                    this.learningContentService.updateById(slide);
                }
            }
liqin's avatar
liqin committed
756 757
            theSource.setSortorder(targetSortorder);
            this.learningContentService.updateById(theSource);
liqin's avatar
liqin committed
758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773
        }
        //默认sortorder为正序排序,向上移动
        else if ("up".equalsIgnoreCase(moveType) && sourceSortorder > targetSortorder) {
            QueryWrapper<LearningContent> wrapper = new QueryWrapper<>();
            wrapper.between("sortorder", targetSortorder, sourceSortorder);
            wrapper.select("id", "sortorder");
            List<LearningContent> slideList = this.learningContentService.list(wrapper);
            for (LearningContent slide : slideList) {
                if (!slide.getId().equals(sourceId)) {
                    slide.setSortorder(slide.getSortorder() + 1);
                    this.learningContentService.updateById(slide);
                }
            }
            theSource.setSortorder(targetSortorder);
            this.learningContentService.updateById(theSource);
        }
liqin's avatar
liqin committed
774
        return getSuccessResult();
liqin's avatar
liqin committed
775 776
    }

liqin's avatar
liqin committed
777 778 779
    @ApiOperation(value = "启用/禁用学习内容", notes = "启用/禁用学习内容")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"),
liqin's avatar
liqin committed
780
            @ApiImplicitParam(name = "isPublish", value = "是否启用", dataType = "boolean", paramType = "query", allowableValues = "True, False")
liqin's avatar
liqin committed
781 782
    })
    @PutMapping("/enable/{id}")
wzp's avatar
wzp committed
783
    @RequiresAuthentication  //@RequiresPermissions("learning:content:enable")
wzp's avatar
wzp committed
784
    @MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.ENABLE)
liqin's avatar
liqin committed
785
    public Map<String, Object> enableLearningContent(@PathVariable("id") String id, @RequestParam("isPublish") Boolean isPublish) {
liqin's avatar
liqin committed
786
        final TUser user = getcurUser();
liqin's avatar
liqin committed
787 788

        LearningContent learningContent = this.learningContentService.getById(id);
789 790 791 792 793 794 795 796 797 798 799

        //单位管理员只能禁用或启用所属机构及其子机构的学习内容
        List<String> curUserSubOrgIds = getCurUserSubOrgIds();
        if (!CollectionUtils.isEmpty(curUserSubOrgIds)){
            String organCode = learningContent.getOrganCode();
            boolean contains = curUserSubOrgIds.contains(organCode);
            if (!contains){
                return getFailResult("单位管理员只能禁用或启用所属机构及其子机构的学习内容");
            }
        }

liqin's avatar
liqin committed
800
        final Audit audit = Audit.builder()
liqin's avatar
liqin committed
801 802
                .content(learningContent.getName())
                .name(learningContent.getName())
liqin's avatar
liqin committed
803
                .refItemId(id)
wzp's avatar
wzp committed
804
                .userId(user.getId())
liqin's avatar
liqin committed
805
                .organId(user.getOrgId())
liqin's avatar
liqin committed
806 807
                .type(AuditTypeEnum.LEARNING_CONTENT.name())
                .operation(isPublish ? AuditOperationEnum.ENABLE.name() : AuditOperationEnum.DISABLE.name())
liqin's avatar
liqin committed
808 809
                .status(AuditStatusEnum.TBC.name())
                .level(AuditStatusEnum.TBC.name())
liqin's avatar
liqin committed
810
                .build();
liqin's avatar
liqin committed
811
        this.auditService.save(audit);
liqin's avatar
liqin committed
812
        this.learningContentService.updateById(LearningContent.builder().id(id).auditStatus(AuditStatusEnum.TBC.name()).build());
liqin's avatar
liqin committed
813 814 815
        return getSuccessResult();
    }

liqin's avatar
liqin committed
816 817
}