| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- 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<BisInspItemQuesInfoDto> quesInfos = bisInspItemQuesInfoService.findItemByType(bisInspItemQuesInfoParam);
- Map<String, List<BisInspItemQuesInfoDto>> quesInfoMap = new HashedMap();
- quesInfos.forEach(bisInspItemQuesInfoDto -> {
- if (quesInfoMap.containsKey(bisInspItemQuesInfoDto.geteName())) {
- quesInfoMap.get(bisInspItemQuesInfoDto.geteName()).add(bisInspItemQuesInfoDto);
- } else {
- List<BisInspItemQuesInfoDto> temp = new ArrayList<>();
- temp.add(bisInspItemQuesInfoDto);
- quesInfoMap.put(bisInspItemQuesInfoDto.geteName(),temp);
- }
- });
- String rgstrId = null;
- //要删除的问题规则列表
- Set<String> deletePblmList = new HashSet<>();
- //子column列表
- List<String> columnList = new ArrayList<>();
- //以存在的sn列表
- List<BisInspItemQuesNum> quesSnList = new ArrayList<BisInspItemQuesNum>(){
- @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<BisInspItemQuesNumDto> bisInspItemQuesNumDtoList = bisInspItemQuesNumDao.getById(itemId,olBisInspOrg.getOrgId());
- if (bisInspItemQuesNumDtoList == null || bisInspItemQuesNumDtoList.isEmpty()) {
- continue;
- }
- bisInspItemQuesNumDtoList.forEach(bisInspItemQuesNumDto -> {
- List<String> 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<String, Object> 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<ObjInspPblms> 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<String, List<BisInspItemQuesInfoDto>> quesInfoMap, Set<String> deletePblmList, String childrenColumns,List<String> 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());
- }
- }
- }
|