xiejun
2025-01-22 d9183aa80ae17d36b79dda48c6b1d7fa22a80ee3
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeReferConfigServiceImpl.java
@@ -1,15 +1,42 @@
package com.vci.ubcs.code.service.impl;
import com.vci.ubcs.code.entity.CodeReferConfig;
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.CodeReferConfigService;
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.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 static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.TS_NOT_PROCESS;
/**
 * 参照配置表(CodeReferconfig)表服务实现类
@@ -18,9 +45,16 @@
 * @since 2023-05-19 17:48:02
 */
@Service("CodeReferconfigService")
public class CodeReferConfigServiceImpl implements CodeReferConfigService {
public class CodeReferConfigServiceImpl extends MPJBaseServiceImpl<CodeReferConfigMapper,CodeReferConfig> implements ICodeReferConfigService {
    @Resource
    private CodeReferConfigMapper codeReferconfigMapper;
   @Resource
   private ICodeShowFieldConfigService ICodeShowFieldConfigService;
   @Resource
   private ICodeSrchCondConfigService ICodeSrchCondConfigService;
    /**
     * 通过ID查询单条数据
@@ -29,55 +63,186 @@
     * @return 实例对象
     */
    @Override
    public CodeReferConfig queryById(String oid) {
        return this.codeReferconfigMapper.queryById(oid);
    public CodeReferConfigVO queryById(String oid) {
      CodeReferConfig codeReferConfig = this.codeReferconfigMapper.selectJoinOne(CodeReferConfig.class, this.getMPJLambdaWrapper().eq(CodeReferConfig::getOid, oid));
      return CodeReferConfigWraper.build().entityVO(codeReferConfig);
    }
    /**
     * 分页查询
     *
     * @param plCodeReferconfig 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
   /**
    * 分页查询
    *
    * @param bladeQueryObject 筛选条件
    * @return 查询结果
    */
   @Override
   public IPage<CodeReferConfigVO> queryByJoinPage(BladeQueryObject bladeQueryObject) {
      CodeReferConfig codeReferConfig = new CodeReferConfig();
      // 根据租户进行区分对应的参照配置
      Map<String, Object> 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<CodeReferConfig> codeReferConfigs = codeReferconfigMapper.selectJoinPage(codeReferConfig, Condition.getPage(query));
      return CodeReferConfigWraper.build().pageVO(codeReferConfigs);
   }
    @Override
    public Page<CodeReferConfig> queryByPage(CodeReferConfig plCodeReferconfig, PageRequest pageRequest) {
        long total = this.codeReferconfigMapper.count(plCodeReferconfig);
        return new PageImpl<>(this.codeReferconfigMapper.queryAllByLimit(plCodeReferconfig, pageRequest), pageRequest, total);
    }
    public List<CodeReferConfigVO> queryByList(CodeReferConfigVO codeReferConfigVO) {
      codeReferConfigVO.setTenantId(AuthUtil.getTenantId());
      //MPJLambdaWrapper<CodeReferConfig> mpjLambdaWrapper = UBCSCondition.getMPJLambdaWrapper(bladeQueryObject.getConditionMap(), CodeReferConfig.class)
      MPJLambdaWrapper<CodeReferConfig> mpjLambdaWrapper = getMPJLambdaWrapper()
         .setEntity(codeReferConfigVO)
         .orderBy(true, true, CodeReferConfig::getCreateTime);
      List<CodeReferConfig> codeReferConfigList = codeReferconfigMapper.selectJoinList(CodeReferConfig.class, mpjLambdaWrapper);
      return CodeReferConfigWraper.build().listVO(codeReferConfigList);
   }
    /**
     * 新增数据
     *
     * @param plCodeReferconfig 实例对象
     * @param codeReferConfigVO 实例对象
     * @return 实例对象
     */
    @Override
    public CodeReferConfig insert(CodeReferConfig plCodeReferconfig) {
        this.codeReferconfigMapper.insert(plCodeReferconfig);
        return plCodeReferconfig;
   @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);
      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<CodeReferConfig> wrapper = Wrappers.<CodeReferConfig>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<CodeReferConfig> getMPJLambdaWrapper(){
      MPJLambdaWrapper<CodeReferConfig> 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 plCodeReferconfig 实例对象
     * @param codeReferConfigVO 实例对象
     * @return 实例对象
     */
    @Override
    public CodeReferConfig update(CodeReferConfig plCodeReferconfig) {
        this.codeReferconfigMapper.update(plCodeReferconfig);
        return this.queryById(plCodeReferconfig.getOid());
   @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 oid 主键
     * @param codeReferConfigDTO
     * @return 是否成功
     */
    @Override
    public boolean deleteById(String oid) {
        return this.codeReferconfigMapper.deleteById(oid) > 0;
   @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;
   }
}