package com.xhkjedu.sapi.service.system;

import com.xhkjedu.sapi.mapper.system.ModuleMapper;
import com.xhkjedu.sapi.mapper.system.UserModuleMapper;
import com.xhkjedu.sapi.model.system.TModule;
import com.xhkjedu.sapi.model.system.TUserModule;
import com.xhkjedu.sapi.vo.system.UserModuleVo;
import com.xhkjedu.utils.N_Utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @ClassName UserModuleService
 * Description 用户常用模块
 * Author WN
 * Date 2020/6/15 14:58
 **/
@Service
@Slf4j
public class UserModuleService {
    @Resource
    private UserModuleMapper userModuleMapper;
    @Resource
    private ModuleMapper moduleMapper;

    //用户常用模块集合
    public List<UserModuleVo> listUserModules(Integer userid, Integer belongcode){
        return userModuleMapper.listUserModules(userid,belongcode);
    }

    //保存
    @Transactional(rollbackFor = Exception.class)
    public Integer save(TUserModule userModule) throws Exception {
        try {
            userModule.setCreatetime(N_Utils.getSecondTimestamp());
            //先删除已存在
            userModuleMapper.deleteByUserid(userModule.getUserid());
            if(userModule.getModuleids()!=null && userModule.getModuleids().size()>0){
                return saveUserModule(userModule.getModuleids(),userModule);
            }else{
                return 1;
            }

        } catch (Exception e) {
            log.error("用户模块保存失败："+e.getMessage());
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            throw new RuntimeException("用户模块保存失败");
        }
    }

    //批量保存用户模块信息
    private Integer saveUserModule(List<String> moduleids,TUserModule userModule){
        List<TUserModule> lst = new ArrayList<>();

        //获取所添加常用应用的模块码，
        List<TModule> modulelist = moduleMapper.listModulesByModuleIds(moduleids);
        Map<String,Integer> mapModule = modulelist.stream().collect(Collectors.toMap(TModule::getModuleid,TModule::getBelongcode));

        for(int i=0;i<moduleids.size();i++){
            String mid = moduleids.get(i);
            TUserModule um = new TUserModule();
            BeanUtils.copyProperties(userModule,um);
            um.setModuleid(mid);
            um.setUmorder(i+1);
            um.setBelongcode(mapModule.get(mid));

            lst.add(um);
        }
        //批量保存
        return userModuleMapper.saveBathUserModule(lst);
    }

    //修改
    public Integer updateOrder(TUserModule userModule){
        return userModuleMapper.updateByPrimaryKeySelective(userModule);
    }

    //删除
    public Integer del(Integer umid){
        return userModuleMapper.deleteByPrimaryKey(umid);
    }
}
