package com.vincent.rsf.server.common.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.system.entity.Fields; import com.vincent.rsf.server.system.entity.FieldsItem; import com.vincent.rsf.server.system.service.FieldsItemService; import com.vincent.rsf.server.system.service.FieldsService; import org.apache.commons.lang3.StringUtils; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** * @author Ryan * @version 1.0 * @title FieldsUtils * @description * @create 2025/3/12 12:33 */ public class FieldsUtils { /** * @author Ryan * @description 通过字段唯一标识获取动态字段对象key-value * @param * @return 扩展字段对象 * @time 2025/3/12 12:50 */ public static Map getFields(String uuid) { Map fieldsMap = new HashMap<>(); FieldsService fieldsService = SpringUtils.getBean(FieldsService.class); List fields = fieldsService.list(new LambdaQueryWrapper().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); if (fields.isEmpty()) { return null; } FieldsItemService fieldsItemService = SpringUtils.getBean(FieldsItemService.class); List fieldsItems = fieldsItemService.list(new LambdaQueryWrapper().eq(FieldsItem::getUuid, uuid)); for (Fields field : fields ) { if (fieldsItems.isEmpty()) { fieldsMap.put(field.getFields(), null); continue; } fieldsItems.forEach(fieldsItem -> { if (fieldsItem.getFieldsId().equals(field.getId())) { fieldsMap.put(field.getFields(), fieldsItem.getValue()); } }); } return fieldsMap; } /** * @author Ryan * @description 获取集合扩展字段key-value值 * @param * @return 包含扩展字段的集合对象 * @time 2025/3/15 15:05 */ public static List> getExtendFields(List> params) { FieldsService fieldsService = SpringUtils.getBean(FieldsService.class); List fields = fieldsService.list(new LambdaQueryWrapper() .eq(Fields::getStatus, 1) .eq(Fields::getFlagEnable, 1)); FieldsItemService fieldsItemService = SpringUtils.getBean(FieldsItemService.class); List> result = new ArrayList<>(); for (Map param : params) { result.add(param); if (Objects.isNull(param.get("fieldsIndex"))) { continue; } List itemList = fieldsItemService .list(new LambdaQueryWrapper() .eq(FieldsItem::getUuid, param.get("fieldsIndex"))); if (itemList.isEmpty()) { continue; } fields.forEach(fds -> { for (FieldsItem fieldsItem : itemList) { if (!Objects.isNull(fieldsItem.getFieldsId()) && fieldsItem.getFieldsId().equals(fds.getId())) { param.put(fds.getFields(), fieldsItem.getValue()); } } }); } return result; } /** * @param template * @return * @author Ryan * @description 动态字段value保存 * @time 2025/3/18 15:00 */ @Transactional(rollbackFor = Exception.class) public static boolean saveFields(Map template, String uuid) throws Exception{ List fields = getFieldsSta(); FieldsItemService fieldsItemService = SpringUtils.getBean(FieldsItemService.class); List fieldsItems = new ArrayList<>(); if (!fields.isEmpty()) { for (Fields obj : fields) { if (!Objects.isNull(template.get(obj.getFields())) && StringUtils.isNotBlank(template.get(obj.getFields()).toString())) { FieldsItem item = new FieldsItem(); item.setUuid(uuid) .setValue(template.get(obj.getFields()).toString()) .setMatnrId(Long.parseLong(template.get("matnrId").toString())) .setFieldsId(obj.getId()); fieldsItems.add(item); } } if (fieldsItems.isEmpty()) { return false; } if (!fieldsItemService.saveBatch(fieldsItems)) { throw new CoolException("扩展字段保存失败!!"); } return true; } return false; } /** * 获取所有开启动态扩展字段 * @return */ public static List getFieldsSta() { FieldsService fieldsService = SpringUtils.getBean(FieldsService.class); return fieldsService.list(new LambdaQueryWrapper().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1)); } /** * @author Ryan * @description 动态字段修改 * @param * @return * @time 2025/4/7 15:28 */ @Transactional(rollbackFor = Exception.class) public static void updateFieldsValue(Map params) throws Exception { List fields = getFieldsSta(); if (fields.isEmpty()) { return; } Object fieldsIndex = params.get("fieldsIndex"); if (!Objects.isNull(fieldsIndex) && StringUtils.isNotBlank(fieldsIndex.toString())) { String index = fieldsIndex.toString(); FieldsItemService fieldsItemService = SpringUtils.getBean(FieldsItemService.class); for (Fields field : fields) { if (!Objects.isNull(params.get(field.getFields()))) { FieldsItem indexItem = fieldsItemService.getOne(new LambdaQueryWrapper() .eq(FieldsItem::getUuid, index) .eq(FieldsItem::getFieldsId, field.getId())); //如果子表为空,执行插入操作,否则就执行修改操作 if (Objects.isNull(indexItem)) { FieldsItem item = new FieldsItem(); item.setUuid(index) .setFieldsId(field.getId()) .setMatnrId(!Objects.isNull(params.get("matnrId")) ? Long.parseLong(params.get("matnrId").toString()) : null) .setValue(params.get(field.getFields()).toString()); if (!fieldsItemService.save(item)) { throw new CoolException("扩展字段修改失败!!"); } } else { indexItem.setValue(params.get(field.getFields()).toString()); if (!fieldsItemService.updateById(indexItem)) { throw new CoolException("扩展字段修改失败!!"); } } } } } else { saveFields(params, params.get("index").toString()); } } }