package com.persagy.proxy.object.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.persagy.proxy.adm.constant.AdmDictCategoryEnum; import com.persagy.proxy.adm.request.AdmCreateRequest; import com.persagy.proxy.adm.request.AdmQueryCriteria; import com.persagy.proxy.adm.request.AdmResponse; import com.persagy.proxy.adm.utils.AdmContextUtil; import com.persagy.proxy.adm.utils.ObjectNameUtil; import com.persagy.proxy.dictionary.model.AdmDict; import com.persagy.proxy.dictionary.model.AdmObjectType; import com.persagy.proxy.dictionary.service.IAdmDictService; import com.persagy.proxy.object.model.AdmComponent; import com.persagy.proxy.object.service.IAdmComponentService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.ws.rs.QueryParam; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Adm 部件 API * @author lvxy * @date 2021/8/16 */ @Slf4j @RestController @RequestMapping("/object/component") public class AdmComponentController { @Autowired private IAdmComponentService service; @Autowired private IAdmDictService dictService; /** * 统计 * @param request * @return * @throws Exception */ @PostMapping("/count") public AdmResponse count(@RequestBody AdmQueryCriteria request) throws Exception { request.setName(AdmComponent.OBJ_TYPE); request.setOnlyCount(true); return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmComponent.class); } /** * 创建 * @param createRequest * @return * @throws Exception */ @PostMapping("/create") public AdmResponse create(@RequestBody AdmCreateRequest createRequest, @QueryParam("projectId") String projectId) throws Exception { List vos = CollUtil.newArrayList(createRequest.getContent()); if(CollUtil.isEmpty(vos)){ return AdmResponse.success(); } // 查询所有设备类型 AdmDict dictCond = AdmDict.builder().type(AdmDictCategoryEnum.COMPONENT.getValue()).build(); AdmResponse dictResponse = dictService.queryCategory(AdmContextUtil.toDmpContext(), dictCond, AdmObjectType.class); List dicts = (List) dictResponse.getContent(); // 转换为Map,key为编码后4位。用于适配旧类型编码 Map shortDictMap = new HashMap<>(); Map fullDictMap = new HashMap<>(); for(int i = 0,j = CollUtil.size(dicts);i < j;i++) { AdmObjectType dict = dicts.get(i); shortDictMap.put(StrUtil.subSufByLength(dict.getCode(), 6), dict); fullDictMap.put(dict.getCode(), dict); } // 设备属性调整 List filterVOs = new ArrayList<>(); for(AdmComponent component:vos) { // 如果不是Eq开头,则重新生成ID if(StrUtil.startWith(component.getId(), "Ec")) { component.setId("Ec"+ IdUtil.simpleUUID()); } // 类型编码适配 String classCode = component.getClassCode(); // 如果编码为空,或在4位、6位里都不存在,则报错 if(StrUtil.isBlank(classCode) || (shortDictMap.get(classCode) == null && fullDictMap.get(classCode) == null)) { log.error(StrUtil.format("没有找到对象类型【{}】!", component.getClassCode())); continue; } filterVOs.add(component); // 如果少于6位,则需要适配新编码 if(classCode.length() < 8) { AdmObjectType dict = MapUtil.get(shortDictMap, classCode, AdmObjectType.class); component.setClassCode(dict.getCode()); } // 如果名称为空,则提供默认名称 if (StrUtil.isEmpty(component.getName())){ AdmObjectType dict = MapUtil.get(fullDictMap, component.getClassCode(), AdmObjectType.class); String preName = dict == null ? "部件" : dict.getName(); component.setName(ObjectNameUtil.objectName(preName + "-")); } } if(CollUtil.isEmpty(filterVOs)){ return AdmResponse.success(); } filterVOs = service.doInsert(AdmContextUtil.toDmpContext(), AdmComponent.class, filterVOs); return AdmResponse.success(filterVOs); } /** * 根据ID删除 * @param vos * @return * @throws Exception */ @PostMapping("/delete") public AdmResponse delete( @RequestBody List vos) throws Exception { service.doDelete(AdmContextUtil.toDmpContext(), vos); return AdmResponse.success(); } /** * 更新 * @param createRequest * @return * @throws Exception */ @PostMapping("/update") public AdmResponse update(@RequestBody AdmCreateRequest createRequest, @QueryParam("projectId") String projectId) throws Exception { List vos = CollUtil.newArrayList(createRequest.getContent()); vos = service.doUpdate(AdmContextUtil.toDmpContext(), AdmComponent.class, vos); return AdmResponse.success(vos); } /** * 查询 * * @param request * @return * @throws Exception */ @PostMapping("/query") public AdmResponse query(@RequestBody AdmQueryCriteria request) throws Exception { request.setName(AdmComponent.OBJ_TYPE); return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmComponent.class); } }