package com.doumee.service.business.impl; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.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().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().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 deleteWrapper = new UpdateWrapper<>(approveTempl); approveTemplMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List 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 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 wrapper = new QueryWrapper<>(approveTempl); ApproveTempl model = approveTemplMapper.selectOne(wrapper.lambda().last("limit 1")); if(model!=null){ List approveParamList = approveParamMapper.selectList(new QueryWrapper() .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() .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 findList(ApproveTempl approveTempl) { QueryWrapper wrapper = new QueryWrapper<>(approveTempl); return approveTemplMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper 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 wrapper = new QueryWrapper<>(approveTempl); return approveTemplMapper.selectCount(wrapper); } }