package com.doumee.service.business.impl; 
 | 
  
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.service.business.third.model.LoginUserInfo; 
 | 
import com.doumee.service.business.third.model.PageData; 
 | 
import com.doumee.service.business.third.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.business.ApproveParamMapper; 
 | 
import com.doumee.dao.business.ApproveTemplMapper; 
 | 
import com.doumee.dao.business.PlatformReasonMapper; 
 | 
import com.doumee.dao.business.join.MemberJoinMapper; 
 | 
import com.doumee.dao.business.model.*; 
 | 
import com.doumee.dao.business.model.Member; 
 | 
import com.doumee.service.business.ApproveTemplService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 审批模版信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @since 2024/04/28 16:06 
 | 
 */ 
 | 
@Service 
 | 
public class ApproveTemplServiceImpl implements ApproveTemplService { 
 | 
  
 | 
    @Autowired 
 | 
    private ApproveTemplMapper approveTemplMapper; 
 | 
    @Autowired 
 | 
    private ApproveParamMapper approveParamMapper; 
 | 
    @Autowired 
 | 
    private MemberJoinMapper memberJoinMapper; 
 | 
    @Autowired 
 | 
    private PlatformReasonMapper platformReasonMapper; 
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public int save(ApproveTempl model) { 
 | 
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(loginUserInfo == null){ 
 | 
            loginUserInfo = model.getLoginUserInfo(); 
 | 
        } 
 | 
        if(model.getType() == null || Constants.ApproveTmplType.getName(model.getType()) == null){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformReason reason = null; 
 | 
        if(Constants.equalsInteger(model.getType(),Constants.ApproveTmplType.PLATFROM_REASON.getKey())){ 
 | 
            if(model.getReasonId() ==null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
            } 
 | 
            reason = platformReasonMapper.selectById(model.getReasonId()); 
 | 
            if(reason ==null){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,入园原因信息不存在,请返回刷新页面重试!"); 
 | 
            } 
 | 
        } 
 | 
        ApproveTempl template = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda() 
 | 
                .eq(ApproveTempl::getType,model.getType() ) 
 | 
                .eq(ApproveTempl::getIsdeleted,Constants.ZERO) 
 | 
                //如果是入园原因配置,根据ID查询对应的模版信息 
 | 
                .eq(Constants.equalsInteger(model.getType(),Constants.ApproveTmplType.PLATFROM_REASON.getKey()),ApproveTempl::getId,model.getReasonId()) 
 | 
                .last("limit 1")); 
 | 
        Date date =new Date(); 
 | 
        if(template == null){ 
 | 
            //如果模版没有,则新增 
 | 
            template = new ApproveTempl(); 
 | 
            template.setType(model.getType()); 
 | 
            template.setCreateDate(date); 
 | 
            template.setCreator(loginUserInfo.getId()); 
 | 
            template.setEditDate(date); 
 | 
            template.setIsdeleted(Constants.ZERO); 
 | 
            template.setEditor(loginUserInfo.getId()); 
 | 
            template.setName(Constants.ApproveTmplType.getName(model.getType())); 
 | 
            approveTemplMapper.insert(template); 
 | 
        } 
 | 
        int level = 0; 
 | 
        if(model.getParamList()!=null && model.getParamList().size()>0){ 
 | 
            for(ApproveParam param : model.getParamList()){ 
 | 
                param.setCreateDate(date); 
 | 
                param.setId(null); 
 | 
                param.setCreator(loginUserInfo.getId()); 
 | 
                param.setEditDate(date); 
 | 
                param.setEditor(loginUserInfo.getId()); 
 | 
                param.setIsdeleted(Constants.ZERO); 
 | 
//                param.setLevel(level); 
 | 
                param.setMemberType(Constants.formatIntegerNum(param.getMemberType())); 
 | 
                param.setTemplId(template.getId()); 
 | 
                param.setType(Constants.formatIntegerNum(param.getType())); 
 | 
                param.setAddrParam(Constants.formatIntegerNum(param.getAddrParam())); 
 | 
                param.setDriverParam(Constants.formatIntegerNum(param.getDriverParam())); 
 | 
                param.setApproveType(Objects.isNull(param.getApproveType())?Constants.TWO:param.getApproveType()); 
 | 
                level ++ ; 
 | 
            } 
 | 
            //先清除原来所有的就陪配置 
 | 
            approveParamMapper.delete(new UpdateWrapper<ApproveParam>().lambda() 
 | 
                    .eq(ApproveParam::getTemplId,template.getId())); 
 | 
            //批量插入新的配置 
 | 
            approveParamMapper.insert(model.getParamList()); 
 | 
        } 
 | 
        if(Constants.equalsInteger(model.getType(),Constants.ApproveTmplType.PLATFROM_REASON.getKey())){ 
 | 
            PlatformReason r = new PlatformReason(); 
 | 
            r.setApproveTemplId(template.getId()); 
 | 
            r.setId(model.getReasonId()); 
 | 
            r.setEditor(template.getEditor()); 
 | 
            r.setEditDate(new Date()); 
 | 
            platformReasonMapper.updateById(r); 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Integer create(ApproveTempl model) { 
 | 
        approveTemplMapper.insert(model); 
 | 
        return model.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id, LoginUserInfo userInfo) { 
 | 
        ApproveTempl model = new ApproveTempl(); 
 | 
        model.setEditDate(new Date()); 
 | 
        model.setEditor(userInfo.getId()); 
 | 
        model.setId(id); 
 | 
        model.setIsdeleted(Constants.ONE); 
 | 
        approveTemplMapper.updateById(model); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(ApproveTempl approveTempl) { 
 | 
        UpdateWrapper<ApproveTempl> deleteWrapper = new UpdateWrapper<>(approveTempl); 
 | 
        approveTemplMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        for(Integer id:ids){ 
 | 
            deleteById(id,user); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(ApproveTempl approveTempl) { 
 | 
        approveTemplMapper.updateById(approveTempl); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<ApproveTempl> approveTempls) { 
 | 
        if (CollectionUtils.isEmpty(approveTempls)) { 
 | 
            return; 
 | 
        } 
 | 
        for (ApproveTempl approveTempl: approveTempls) { 
 | 
            this.updateById(approveTempl); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public ApproveTempl findById(Integer id) { 
 | 
        return approveTemplMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public ApproveTempl findOne(ApproveTempl approveTempl) { 
 | 
        QueryWrapper<ApproveTempl> wrapper = new QueryWrapper<>(approveTempl); 
 | 
        ApproveTempl model =  approveTemplMapper.selectOne(wrapper.lambda().last("limit 1")); 
 | 
        if(model!=null){ 
 | 
            List<ApproveParam> approveParamList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>() 
 | 
                    .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(ApproveParam::getTemplId,model.getId()) 
 | 
                    .orderByAsc(ApproveParam::getLevel) 
 | 
            ); 
 | 
            for (ApproveParam approveParam :approveParamList) { 
 | 
                if(StringUtils.isNotBlank(approveParam.getObjIds())){ 
 | 
                    approveParam.setMemberList(memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() 
 | 
                            .selectAll(Member.class) 
 | 
                            .selectAs(Company::getName,Member::getCompanyName) 
 | 
                            .leftJoin(Company.class,Company::getId,Member::getCompanyId) 
 | 
                            .eq(Member::getIsdeleted,Constants.ZERO) 
 | 
                            .in(Member::getId,approveParam.getObjIds().split(",")))); 
 | 
                } 
 | 
            } 
 | 
            model.setParamList(approveParamList); 
 | 
        } 
 | 
        return model; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<ApproveTempl> findList(ApproveTempl approveTempl) { 
 | 
        QueryWrapper<ApproveTempl> wrapper = new QueryWrapper<>(approveTempl); 
 | 
        return approveTemplMapper.selectList(wrapper); 
 | 
    } 
 | 
   
 | 
    @Override 
 | 
    public PageData<ApproveTempl> findPage(PageWrap<ApproveTempl> pageWrap) { 
 | 
        IPage<ApproveTempl> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<ApproveTempl> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        queryWrapper.lambda() 
 | 
                .eq(pageWrap.getModel().getId() != null, ApproveTempl::getId, pageWrap.getModel().getId()) 
 | 
                .eq(pageWrap.getModel().getCreator() != null, ApproveTempl::getCreator, pageWrap.getModel().getCreator()) 
 | 
                .ge(pageWrap.getModel().getCreateDate() != null, ApproveTempl::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())) 
 | 
                .le(pageWrap.getModel().getCreateDate() != null, ApproveTempl::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())) 
 | 
                .eq(pageWrap.getModel().getEditor() != null, ApproveTempl::getEditor, pageWrap.getModel().getEditor()) 
 | 
                .ge(pageWrap.getModel().getEditDate() != null, ApproveTempl::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())) 
 | 
                .le(pageWrap.getModel().getEditDate() != null, ApproveTempl::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())) 
 | 
                .eq(pageWrap.getModel().getIsdeleted() != null, ApproveTempl::getIsdeleted, pageWrap.getModel().getIsdeleted()) 
 | 
                .eq(pageWrap.getModel().getRemark() != null, ApproveTempl::getRemark, pageWrap.getModel().getRemark()) 
 | 
                .eq(pageWrap.getModel().getType() != null, ApproveTempl::getType, pageWrap.getModel().getType()) 
 | 
                .eq(pageWrap.getModel().getName() != null, ApproveTempl::getName, pageWrap.getModel().getName()) 
 | 
        ; 
 | 
        for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(approveTemplMapper.selectPage(page, queryWrapper)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(ApproveTempl approveTempl) { 
 | 
        QueryWrapper<ApproveTempl> wrapper = new QueryWrapper<>(approveTempl); 
 | 
        return approveTemplMapper.selectCount(wrapper); 
 | 
    } 
 | 
} 
 |