package cn.com.goldenwater.dcproj.target; import cn.com.goldenwater.dcproj.constValue.CommonLabel; import cn.com.goldenwater.dcproj.constValue.SplitValue; import cn.com.goldenwater.dcproj.dao.BisInspItemQuesNumDao; import cn.com.goldenwater.dcproj.dao.BisInspPblmDao; import cn.com.goldenwater.dcproj.dao.ObjInspPblmsDao; import cn.com.goldenwater.dcproj.dto.BisInspItemQuesInfoDto; import cn.com.goldenwater.dcproj.dto.BisInspItemQuesNumDto; import cn.com.goldenwater.dcproj.model.BisInspItemQuesNum; import cn.com.goldenwater.dcproj.model.ObjInspPblms; import cn.com.goldenwater.dcproj.model.OlBisInspOrg; import cn.com.goldenwater.dcproj.param.BisInspItemQuesInfoParam; import cn.com.goldenwater.dcproj.param.BisInspPblmParam; import cn.com.goldenwater.dcproj.service.BisInspItemQuesInfoService; import cn.com.goldenwater.dcproj.service.OlBisInspOrgService; import cn.com.goldenwater.target.CheckException; import org.apache.commons.collections.map.HashedMap; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * Created by jinshui on 2020/4/7. */ @Aspect @Component("fillInAspect") public class FillInAspect { @Autowired private OlBisInspOrgService olBisInspOrgService; @Autowired private BisInspItemQuesInfoService bisInspItemQuesInfoService; @Autowired private BisInspItemQuesNumDao bisInspItemQuesNumDao; @Autowired private ObjInspPblmsDao objInspPblmsDao; @Autowired private BisInspPblmDao bisInspPblmDao; @Pointcut(value = "@annotation(cn.com.goldenwater.dcproj.target.FillIn)") public void fillInAspect() { } @Around("fillInAspect()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable{ MethodSignature signature = (MethodSignature) pjp.getSignature(); Method method = signature.getMethod(); FillIn fillIn = method.getAnnotation(FillIn.class); if (fillIn != null && fillIn.removePblm()) { String tname = fillIn.tableName(); if (StringUtils.isBlank(tname)) { throw new Exception("系统异常"); } HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); OlBisInspOrg olBisInspOrg=olBisInspOrgService.get(request.getHeader(CommonLabel.ORGId)); // OlBisInspOrg olBisInspOrg=olBisInspOrgService.get("034"); if(olBisInspOrg==null){ throw new CheckException("当前机构不存在!!"); } BisInspItemQuesInfoParam bisInspItemQuesInfoParam = new BisInspItemQuesInfoParam(); bisInspItemQuesInfoParam.setOrgId(olBisInspOrg.getQuoteOrgId()); bisInspItemQuesInfoParam.setTName(tname); bisInspItemQuesInfoParam.setType(fillIn.type()); List quesInfos = bisInspItemQuesInfoService.findItemByType(bisInspItemQuesInfoParam); Map> quesInfoMap = new HashedMap(); quesInfos.forEach(bisInspItemQuesInfoDto -> { if (quesInfoMap.containsKey(bisInspItemQuesInfoDto.geteName())) { quesInfoMap.get(bisInspItemQuesInfoDto.geteName()).add(bisInspItemQuesInfoDto); } else { List temp = new ArrayList<>(); temp.add(bisInspItemQuesInfoDto); quesInfoMap.put(bisInspItemQuesInfoDto.geteName(),temp); } }); String rgstrId = null; //要删除的问题规则列表 Set deletePblmList = new HashSet<>(); //子column列表 List columnList = new ArrayList<>(); //以存在的sn列表 List quesSnList = new ArrayList(){ @Override public boolean contains(Object o) { for (BisInspItemQuesNum bisInspItemQuesNum : this) { BisInspItemQuesNumDto dto = (BisInspItemQuesNumDto)o; if (dto == null) { return false; } if (StringUtils.isBlank(dto.getFileNum()) || StringUtils.isBlank(dto.getSheetNum()) || StringUtils.isBlank(dto.getQuesSn())) { return false; } if (dto.getFileNum().equals(bisInspItemQuesNum.getFileNum()) && dto.getSheetNum().equals(bisInspItemQuesNum.getSheetNum()) && dto.getQuesSn().equals(bisInspItemQuesNum.getQuesSn())) { return true; } } return super.contains(o); } }; //获取需要处理的问题注解 Object[] objects = pjp.getArgs(); if (objects != null) { for (Object object : objects) { Class cla = object.getClass(); if (cla == HttpServletResponse.class) { continue; } Field[] fields = cla.getDeclaredFields(); if (fields == null) { continue; } for (Field field : fields) { field.setAccessible(true); if ("rgstrId".equals(field.getName())) { rgstrId = String.valueOf(field.get(object)); } FillInParam fillInParam = field.getAnnotation(FillInParam.class); if (fillInParam == null) { continue; } String value = String.valueOf(field.get(object)); //值为空不需判断 if (StringUtils.isBlank(value) || "null".equals(value)) { continue; } if (quesInfoMap.containsKey(field.getName())) { if (columnList.contains(field.getName())) { continue; } for (BisInspItemQuesInfoDto bisInspItemQuesInfoDto : quesInfoMap.get(field.getName())) { if (bisInspItemQuesInfoDto.getiValue().equals(value)) { if (bisInspItemQuesInfoDto.getBisInspItemQuesNumList() != null) { for (BisInspItemQuesNum bisInspItemQuesNum : bisInspItemQuesInfoDto.getBisInspItemQuesNumList()) { if (StringUtils.isBlank(bisInspItemQuesNum.getItemId())) { bisInspItemQuesNum.setItemId(bisInspItemQuesInfoDto.getId()); } quesSnList.add(bisInspItemQuesNum); } } continue; } if (!deletePblmList.contains(bisInspItemQuesInfoDto.getId())) { deletePblmList.add(bisInspItemQuesInfoDto.getId()); } } } //处理子字段 if (StringUtils.isNotBlank(fillInParam.childreColums())) { if (value.equals(fillInParam.ivalue())) { continue; } if (!fillInParam.childreColums().contains("|")) { addChildrenColumn(quesInfoMap, deletePblmList, fillInParam.childreColums(),columnList); continue; } int index = -1; if (fillInParam.ivalue().contains(value)) { index = fillInParam.ivalue().indexOf(value); } String []columns = fillInParam.childreColums().split("|"); for (int i = 0; i < columns.length; i++) { if (index == i) { continue; } addChildrenColumn(quesInfoMap, deletePblmList, columns[i],columnList); } continue; } } } if (deletePblmList != null && !deletePblmList.isEmpty()) { if (StringUtils.isNotBlank(rgstrId)) { StringBuilder pblmTypesId = new StringBuilder(""); for (String itemId : deletePblmList) { List bisInspItemQuesNumDtoList = bisInspItemQuesNumDao.getById(itemId,olBisInspOrg.getOrgId()); if (bisInspItemQuesNumDtoList == null || bisInspItemQuesNumDtoList.isEmpty()) { continue; } bisInspItemQuesNumDtoList.forEach(bisInspItemQuesNumDto -> { List snList = new ArrayList<>(); if (StringUtils.isBlank(bisInspItemQuesNumDto.getQuesSn())) { return; } if (quesSnList.contains(bisInspItemQuesNumDto)) { return; } String[] snSplitList = bisInspItemQuesNumDto.getQuesSn().split(SplitValue.DOUHAO_SPLIT); if (snSplitList.length > 0) { for (int i = 0; i < snSplitList.length; i++) { if (snSplitList[i].contains(SplitValue.HENG_SPLIT)) { Integer startIndex = Integer.parseInt(snSplitList[i].split(SplitValue.HENG_SPLIT)[0].toString()); Integer endIndex = Integer.parseInt(snSplitList[i].split(SplitValue.HENG_SPLIT)[1].toString()); while (startIndex <= endIndex) { snList.add(startIndex.toString()); startIndex++; } } else { snList.add(snSplitList[i]); } } } else { snList.add(bisInspItemQuesNumDto.getQuesSn()); } Map param = new HashMap<>(); //获取标准库中问题类别 param.put("orgId",olBisInspOrg.getQuoteOrgId()); param.put("type", fillIn.type()); param.put("fileNum", bisInspItemQuesNumDto.getFileNum()); param.put("sheetNum", bisInspItemQuesNumDto.getSheetNum()); param.put("snList", snList); List pblmIds = objInspPblmsDao.getPblmsBySnAttTypeSort(param); if (pblmIds.size() > 0) { pblmIds.forEach(pblmTypeId -> { pblmTypesId.append("'").append(pblmTypeId.getGuid()).append("'").append(","); }); } }); } if (pblmTypesId.length() > 0 && StringUtils.isNotBlank(rgstrId)) { //删除问题 BisInspPblmParam bisInspPblmParam = new BisInspPblmParam(); bisInspPblmParam.setPblmsTypeId(pblmTypesId.substring(0,pblmTypesId.length() - 1)); bisInspPblmParam.setObjType(fillIn.type()); bisInspPblmParam.setRgstrId(rgstrId); int a = bisInspPblmDao.deletePblmByTypeId(bisInspPblmParam); } } } } } return pjp.proceed(); } private void addChildrenColumn(Map> quesInfoMap, Set deletePblmList, String childrenColumns,List columnList) { String [] columns = childrenColumns.split(","); if (columns.length > 0) { for (String column : columns) { if (StringUtils.isBlank(column)) { continue; } if (quesInfoMap.containsKey(column)) { columnList.add(column); deletePblmList.addAll(quesInfoMap.get(column).stream().collect(Collectors.toMap(BisInspItemQuesInfoDto::getId, Function.identity())).keySet()); } } } else { columnList.add(childrenColumns); deletePblmList.addAll(quesInfoMap.get(childrenColumns).stream().collect(Collectors.toMap(BisInspItemQuesInfoDto::getId, Function.identity())).keySet()); } } }