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.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; 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.service.ICodeReferConfigService; import com.vci.ubcs.code.service.ICodeShowFieldConfigService; import com.vci.ubcs.code.service.ICodeSrchCondConfigService; import com.vci.ubcs.code.vo.CodeReferConfigVO; import com.vci.ubcs.code.wrapper.CodeReferConfigWraper; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.util.MdmBtmTypeConstant; import com.vci.ubcs.starter.web.pagemodel.BladeQueryObject; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.cache.NacosConfigCache; 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.springblade.core.tool.utils.Func; import org.springframework.cglib.beans.BeanMap; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Map; 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 ICodeReferConfigService { @Resource private CodeReferConfigMapper codeReferconfigMapper; @Resource private ICodeShowFieldConfigService ICodeShowFieldConfigService; @Resource private ICodeSrchCondConfigService ICodeSrchCondConfigService; /** * 通过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); } /** * 分页查询 * * @param bladeQueryObject 筛选条件 * @return 查询结果 */ @Override public IPage queryByJoinPage(BladeQueryObject bladeQueryObject) { CodeReferConfig codeReferConfig = new CodeReferConfig(); // 根据租户进行区分对应的参照配置 Map conditionMap = bladeQueryObject.getConditionMap(); // 查询所属租户下的和开启全局的参照配置信息 if(!NacosConfigCache.getAdminUserInfo().getTenantId().equals(AuthUtil.getTenantId())){ conditionMap.put("tenantId",AuthUtil.getTenantId()); } conditionMap.put("isOpenGlobal","true"); 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); } @Override public List queryByList(CodeReferConfigVO codeReferConfigVO) { codeReferConfigVO.setTenantId(AuthUtil.getTenantId()); //MPJLambdaWrapper mpjLambdaWrapper = UBCSCondition.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 = CodeReferConfigWraper.build().entityDO(codeReferConfigVO); codeReferConfig.setOid(VciBaseUtil.getPk().toUpperCase()); DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeReferConfig, MdmBtmTypeConstant.CODE_REFER_CONFIG,null); codeReferConfig.setTenantId(AuthUtil.getTenantId()); boolean resInsertReferConfig = this.codeReferconfigMapper.insert(codeReferConfig) > 0; if (!resInsertReferConfig) { return R.fail("新增参照配置失败!"); } // 主键回填 if(Func.isNotEmpty(codeReferConfig.getCodeShowFieldConfigs())){ ICodeShowFieldConfigService.insertBatch(codeReferConfigVO.getCodeShowFieldConfigVOS(),codeReferConfig.getOid()); } if(Func.isNotEmpty(codeReferConfig.getCodeSrchCondConfigs())){ ICodeSrchCondConfigService.insertBatch(codeReferConfigVO.getCodeSrchCondConfigVOS(),codeReferConfig.getOid()); } return R.data(codeReferConfigVO); } /** * 获取已存在的参照配置 * @param codeReferConfigVO * @return 个数 */ private Long countCodeReferConfig(CodeReferConfigVO codeReferConfigVO) { String templateName = codeReferConfigVO.getName(); String templateId = codeReferConfigVO.getId(); if (StringUtils.isBlank(templateName) && StringUtils.isBlank(templateId)){ throw new VciBaseException("参照配置编号和名称不能为空"); } LambdaQueryWrapper wrapper = Wrappers.query() .lambda().eq(CodeReferConfig::getId, codeReferConfigVO.getId()) .eq(CodeReferConfig::getTenantId, codeReferConfigVO.getTenantId()) .or(true) .eq(CodeReferConfig::getIsOpenGlobal,"true") // 查询开启全局的参照配置 .eq(CodeReferConfig::getId,templateId) .eq(CodeReferConfig::getName,templateName); 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.ICodeShowFieldConfigService.updateBatch(codeReferConfigVO.getCodeShowFieldConfigVOS()); this.ICodeSrchCondConfigService.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.ICodeShowFieldConfigService.deleteByReferConfigOid(codeReferConfigDTO.getOid()); this.ICodeSrchCondConfigService.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; } }