package com.vci.ubcs.code.service.impl; import com.alibaba.cloud.commons.lang.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.vci.ubcs.code.constant.MdmBtmTypeConstant; import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO; import com.vci.ubcs.code.dto.CodeReferConfigDTO; import com.vci.ubcs.code.entity.*; import com.vci.ubcs.code.mapper.CodeReferConfigMapper; import com.vci.ubcs.code.mapper.CodeShowFieldConfigMapper; import com.vci.ubcs.code.service.CodeReferConfigService; import com.vci.ubcs.code.service.CodeShowFieldConfigService; import com.vci.ubcs.code.service.CodeSrchCondConfigService; import com.vci.ubcs.code.vo.CodeReferConfigVO; import com.vci.ubcs.code.wrapper.CodeClassifyProcessTempWrapper; import com.vci.ubcs.code.wrapper.CodeReferConfigWraper; import com.vci.ubcs.code.wrapper.CodeShowFieldConfigWraper; import com.vci.ubcs.code.wrapper.CodeSrchCondConfigWraper; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.util.Map2MPJLambdaUtil; import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject; import com.vci.ubcs.starter.web.pagemodel.BladeQueryObject; import com.vci.ubcs.starter.web.util.BeanUtilForVCI; import com.vci.ubcs.starter.web.util.VciBaseUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springframework.cglib.beans.BeanMap; import org.springframework.stereotype.Service; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.TS_NOT_PROCESS; /** * 参照配置表(CodeReferconfig)表服务实现类 * * @author ludc * @since 2023-05-19 17:48:02 */ @Service("CodeReferconfigService") public class CodeReferConfigServiceImpl extends MPJBaseServiceImpl implements CodeReferConfigService { @Resource private CodeReferConfigMapper codeReferconfigMapper; @Resource private CodeShowFieldConfigService codeShowFieldConfigService; @Resource private CodeSrchCondConfigService codeSrchCondConfigService; /** * 通过ID查询单条数据 * * @param oid 主键 * @return 实例对象 */ @Override public CodeReferConfigVO queryById(String oid) { CodeReferConfig codeReferConfig = this.codeReferconfigMapper.selectJoinOne(CodeReferConfig.class, this.getMPJLambdaWrapper().eq(CodeReferConfig::getOid, oid)); return CodeReferConfigWraper.build().entityVO(codeReferConfig); } @Override public IPage queryByJoinPage(BladeQueryObject bladeQueryObject) { CodeReferConfig codeReferConfig = new CodeReferConfig(); // 根据租户进行区分对应的参照配置 Map conditionMap = bladeQueryObject.getConditionMap(); conditionMap.put("tenantId",AuthUtil.getTenantId()); BeanMap beanMap = BeanMap.create(codeReferConfig); beanMap.putAll(conditionMap); // 添加默认排序字段,根据时间进行排序 Query query = bladeQueryObject.getQuery(); query.setAscs("CREATETIME"); IPage codeReferConfigs = codeReferconfigMapper.selectJoinPage(codeReferConfig, Condition.getPage(query)); return CodeReferConfigWraper.build().pageVO(codeReferConfigs); } /** * 分页查询 * * @param codeReferConfigVO 筛选条件 * @return 查询结果 */ @Override public List queryByList(CodeReferConfigVO codeReferConfigVO) { codeReferConfigVO.setTenantId(AuthUtil.getTenantId()); //MPJLambdaWrapper mpjLambdaWrapper = Map2MPJLambdaUtil.getMPJLambdaWrapper(bladeQueryObject.getConditionMap(), CodeReferConfig.class) MPJLambdaWrapper mpjLambdaWrapper = getMPJLambdaWrapper() .setEntity(codeReferConfigVO) .orderBy(true, true, CodeReferConfig::getCreateTime); List codeReferConfigList = codeReferconfigMapper.selectJoinList(CodeReferConfig.class, mpjLambdaWrapper); return CodeReferConfigWraper.build().listVO(codeReferConfigList); } /** * 新增数据 * * @param codeReferConfigVO 实例对象 * @return 实例对象 */ @Override @Transactional(rollbackFor = Exception.class) public R insert(CodeReferConfigVO codeReferConfigVO) { VciBaseUtil.alertNotNull(codeReferConfigVO,"需要添加的数据对象"); if (StringUtils.isBlank(codeReferConfigVO.getReferType())){ throw new VciBaseException("参照配置不能为空"); } Long count = countCodeReferConfig(codeReferConfigVO); if(count > 0){ throw new VciBaseException("已存在相同的参照配置"); } CodeReferConfig CodeReferConfig = Objects.requireNonNull(BeanUtil.copy(codeReferConfigVO, CodeReferConfig.class)); boolean resInsertReferConfig = this.codeReferconfigMapper.insert(CodeReferConfig) > 0; if (!resInsertReferConfig) { return R.fail("新增参照配置失败!"); } codeShowFieldConfigService.insertBatch(codeReferConfigVO.getCodeShowFieldConfigVOS()); codeSrchCondConfigService.insertBatch(codeReferConfigVO.getCodeSrchCondConfigVOS()); return R.data(codeReferConfigVO); } /** * 获取已存在的参照配置 * @param codeReferConfigVO * @return 个数 */ private Long countCodeReferConfig(CodeReferConfigVO codeReferConfigVO) { String templateName = codeReferConfigVO.getName(); if (StringUtils.isBlank(templateName)){ throw new VciBaseException("参照配置名称不能为空"); } LambdaQueryWrapper wrapper = Wrappers.query() .lambda().eq(CodeReferConfig::getId, codeReferConfigVO.getId()) .eq(CodeReferConfig::getTenantId, codeReferConfigVO.getTenantId()); Long count = codeReferconfigMapper.selectCount(wrapper); return count; } /** * 连表查询Wrapper对象获取 * @return */ private MPJLambdaWrapper getMPJLambdaWrapper(){ MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(CodeReferConfig.class) .selectAll(CodeReferConfig.class) // .select(CodeShowFieldConfig::getField // ,CodeShowFieldConfig::getTitle // ,CodeShowFieldConfig::getFieldType // ,CodeShowFieldConfig::getSort // ,CodeShowFieldConfig::getAttrSortField // ,CodeShowFieldConfig::getWidth // ,CodeShowFieldConfig::getFixedPosition // ,CodeShowFieldConfig::getTemplet) // .select( // CodeSrchCondConfig::getFilterType, // CodeSrchCondConfig::getFilterField, // CodeSrchCondConfig::getFilterValue) .selectCollection(CodeShowFieldConfig.class, CodeReferConfig::getCodeShowFieldConfigs) .selectCollection(CodeSrchCondConfig.class, CodeReferConfig::getCodeSrchCondConfigs) .leftJoin(CodeShowFieldConfig.class, CodeShowFieldConfig::getReferConfigOid,CodeReferConfig::getOid) .leftJoin(CodeSrchCondConfig.class, CodeSrchCondConfig::getReferConfigOid, CodeReferConfig::getOid); return mpjLambdaWrapper; } /** * 修改数据 * * @param codeReferConfigVO 实例对象 * @return 实例对象 */ @Override @Transactional(rollbackFor = Exception.class) public R update(CodeReferConfigVO codeReferConfigVO) { boolean resUpdateReferConfig = this.codeReferconfigMapper.updateById(codeReferConfigVO) > 0; if (!resUpdateReferConfig) { return R.fail("参照配置修改失败!"); } this.codeShowFieldConfigService.updateBatch(codeReferConfigVO.getCodeShowFieldConfigVOS()); this.codeSrchCondConfigService.updateBatch(codeReferConfigVO.getCodeSrchCondConfigVOS()); return R.data(codeReferConfigVO); } /** * 通过主键删除数据 * * @param codeReferConfigDTO * @return 是否成功 */ @Override @Transactional(rollbackFor = Exception.class) public R deleteById(CodeReferConfigDTO codeReferConfigDTO) { CodeReferConfig tsDO = new CodeReferConfig(); BeanUtil.copyProperties(tsDO,codeReferConfigDTO); CodeReferConfig codeReferConfig = codeReferconfigMapper.queryById(codeReferConfigDTO.getOid()); // 检查ts字段是否一致 if (!checkTs(tsDO,codeReferConfig)) { return R.fail(TS_NOT_PROCESS); } boolean resDeleteReferConfig = this.codeReferconfigMapper.deleteById(codeReferConfigDTO.getOid()) > 0; if (!resDeleteReferConfig) { return R.fail("参照配置删除失败!"); } this.codeShowFieldConfigService.deleteByReferConfigOid(codeReferConfigDTO.getOid()); this.codeSrchCondConfigService.deleteByReferConfigOid(codeReferConfigDTO.getOid()); return R.status(resDeleteReferConfig); } /** * 检查ts * @param tempDO * @param codeReferConfig * @return */ private boolean checkTs(CodeReferConfig tempDO, CodeReferConfig codeReferConfig){ Date dbTs = codeReferConfig.getTs(); Date currentTs = tempDO.getTs(); if(currentTs == null ? dbTs == null:currentTs.compareTo(dbTs)==0){ return true; } return false; } }