3c9aa31dee563f7ac421c816e230ce532c19f61e.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package cn.com.goldenwater.dcproj.target;
  2. import cn.com.goldenwater.dcproj.constValue.CommonLabel;
  3. import cn.com.goldenwater.dcproj.constValue.SplitValue;
  4. import cn.com.goldenwater.dcproj.dao.BisInspItemQuesNumDao;
  5. import cn.com.goldenwater.dcproj.dao.BisInspPblmDao;
  6. import cn.com.goldenwater.dcproj.dao.ObjInspPblmsDao;
  7. import cn.com.goldenwater.dcproj.dto.BisInspItemQuesInfoDto;
  8. import cn.com.goldenwater.dcproj.dto.BisInspItemQuesNumDto;
  9. import cn.com.goldenwater.dcproj.model.BisInspItemQuesNum;
  10. import cn.com.goldenwater.dcproj.model.ObjInspPblms;
  11. import cn.com.goldenwater.dcproj.model.OlBisInspOrg;
  12. import cn.com.goldenwater.dcproj.param.BisInspItemQuesInfoParam;
  13. import cn.com.goldenwater.dcproj.param.BisInspPblmParam;
  14. import cn.com.goldenwater.dcproj.service.BisInspItemQuesInfoService;
  15. import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
  16. import cn.com.goldenwater.target.CheckException;
  17. import org.apache.commons.collections.map.HashedMap;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.aspectj.lang.ProceedingJoinPoint;
  20. import org.aspectj.lang.annotation.Around;
  21. import org.aspectj.lang.annotation.Aspect;
  22. import org.aspectj.lang.annotation.Pointcut;
  23. import org.aspectj.lang.reflect.MethodSignature;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Component;
  26. import org.springframework.web.context.request.RequestContextHolder;
  27. import org.springframework.web.context.request.ServletRequestAttributes;
  28. import javax.servlet.http.HttpServletRequest;
  29. import javax.servlet.http.HttpServletResponse;
  30. import java.lang.reflect.Field;
  31. import java.lang.reflect.Method;
  32. import java.util.*;
  33. import java.util.function.Function;
  34. import java.util.stream.Collectors;
  35. /**
  36. * Created by jinshui on 2020/4/7.
  37. */
  38. @Aspect
  39. @Component("fillInAspect")
  40. public class FillInAspect {
  41. @Autowired
  42. private OlBisInspOrgService olBisInspOrgService;
  43. @Autowired
  44. private BisInspItemQuesInfoService bisInspItemQuesInfoService;
  45. @Autowired
  46. private BisInspItemQuesNumDao bisInspItemQuesNumDao;
  47. @Autowired
  48. private ObjInspPblmsDao objInspPblmsDao;
  49. @Autowired
  50. private BisInspPblmDao bisInspPblmDao;
  51. @Pointcut(value = "@annotation(cn.com.goldenwater.dcproj.target.FillIn)")
  52. public void fillInAspect() {
  53. }
  54. @Around("fillInAspect()")
  55. public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
  56. MethodSignature signature = (MethodSignature) pjp.getSignature();
  57. Method method = signature.getMethod();
  58. FillIn fillIn = method.getAnnotation(FillIn.class);
  59. if (fillIn != null && fillIn.removePblm()) {
  60. String tname = fillIn.tableName();
  61. if (StringUtils.isBlank(tname)) {
  62. throw new Exception("系统异常");
  63. }
  64. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  65. OlBisInspOrg olBisInspOrg=olBisInspOrgService.get(request.getHeader(CommonLabel.ORGId));
  66. // OlBisInspOrg olBisInspOrg=olBisInspOrgService.get("034");
  67. if(olBisInspOrg==null){
  68. throw new CheckException("当前机构不存在!!");
  69. }
  70. BisInspItemQuesInfoParam bisInspItemQuesInfoParam = new BisInspItemQuesInfoParam();
  71. bisInspItemQuesInfoParam.setOrgId(olBisInspOrg.getQuoteOrgId());
  72. bisInspItemQuesInfoParam.setTName(tname);
  73. bisInspItemQuesInfoParam.setType(fillIn.type());
  74. List<BisInspItemQuesInfoDto> quesInfos = bisInspItemQuesInfoService.findItemByType(bisInspItemQuesInfoParam);
  75. Map<String, List<BisInspItemQuesInfoDto>> quesInfoMap = new HashedMap();
  76. quesInfos.forEach(bisInspItemQuesInfoDto -> {
  77. if (quesInfoMap.containsKey(bisInspItemQuesInfoDto.geteName())) {
  78. quesInfoMap.get(bisInspItemQuesInfoDto.geteName()).add(bisInspItemQuesInfoDto);
  79. } else {
  80. List<BisInspItemQuesInfoDto> temp = new ArrayList<>();
  81. temp.add(bisInspItemQuesInfoDto);
  82. quesInfoMap.put(bisInspItemQuesInfoDto.geteName(),temp);
  83. }
  84. });
  85. String rgstrId = null;
  86. //要删除的问题规则列表
  87. Set<String> deletePblmList = new HashSet<>();
  88. //子column列表
  89. List<String> columnList = new ArrayList<>();
  90. //以存在的sn列表
  91. List<BisInspItemQuesNum> quesSnList = new ArrayList<BisInspItemQuesNum>(){
  92. @Override
  93. public boolean contains(Object o) {
  94. for (BisInspItemQuesNum bisInspItemQuesNum : this) {
  95. BisInspItemQuesNumDto dto = (BisInspItemQuesNumDto)o;
  96. if (dto == null) {
  97. return false;
  98. }
  99. if (StringUtils.isBlank(dto.getFileNum()) || StringUtils.isBlank(dto.getSheetNum()) || StringUtils.isBlank(dto.getQuesSn())) {
  100. return false;
  101. }
  102. if (dto.getFileNum().equals(bisInspItemQuesNum.getFileNum()) && dto.getSheetNum().equals(bisInspItemQuesNum.getSheetNum()) && dto.getQuesSn().equals(bisInspItemQuesNum.getQuesSn())) {
  103. return true;
  104. }
  105. }
  106. return super.contains(o);
  107. }
  108. };
  109. //获取需要处理的问题注解
  110. Object[] objects = pjp.getArgs();
  111. if (objects != null) {
  112. for (Object object : objects) {
  113. Class cla = object.getClass();
  114. if (cla == HttpServletResponse.class) {
  115. continue;
  116. }
  117. Field[] fields = cla.getDeclaredFields();
  118. if (fields == null) {
  119. continue;
  120. }
  121. for (Field field : fields) {
  122. field.setAccessible(true);
  123. if ("rgstrId".equals(field.getName())) {
  124. rgstrId = String.valueOf(field.get(object));
  125. }
  126. FillInParam fillInParam = field.getAnnotation(FillInParam.class);
  127. if (fillInParam == null) {
  128. continue;
  129. }
  130. String value = String.valueOf(field.get(object));
  131. //值为空不需判断
  132. if (StringUtils.isBlank(value) || "null".equals(value)) {
  133. continue;
  134. }
  135. if (quesInfoMap.containsKey(field.getName())) {
  136. if (columnList.contains(field.getName())) {
  137. continue;
  138. }
  139. for (BisInspItemQuesInfoDto bisInspItemQuesInfoDto : quesInfoMap.get(field.getName())) {
  140. if (bisInspItemQuesInfoDto.getiValue().equals(value)) {
  141. if (bisInspItemQuesInfoDto.getBisInspItemQuesNumList() != null) {
  142. for (BisInspItemQuesNum bisInspItemQuesNum : bisInspItemQuesInfoDto.getBisInspItemQuesNumList()) {
  143. if (StringUtils.isBlank(bisInspItemQuesNum.getItemId())) {
  144. bisInspItemQuesNum.setItemId(bisInspItemQuesInfoDto.getId());
  145. }
  146. quesSnList.add(bisInspItemQuesNum);
  147. }
  148. }
  149. continue;
  150. }
  151. if (!deletePblmList.contains(bisInspItemQuesInfoDto.getId())) {
  152. deletePblmList.add(bisInspItemQuesInfoDto.getId());
  153. }
  154. }
  155. }
  156. //处理子字段
  157. if (StringUtils.isNotBlank(fillInParam.childreColums())) {
  158. if (value.equals(fillInParam.ivalue())) {
  159. continue;
  160. }
  161. if (!fillInParam.childreColums().contains("|")) {
  162. addChildrenColumn(quesInfoMap, deletePblmList, fillInParam.childreColums(),columnList);
  163. continue;
  164. }
  165. int index = -1;
  166. if (fillInParam.ivalue().contains(value)) {
  167. index = fillInParam.ivalue().indexOf(value);
  168. }
  169. String []columns = fillInParam.childreColums().split("|");
  170. for (int i = 0; i < columns.length; i++) {
  171. if (index == i) {
  172. continue;
  173. }
  174. addChildrenColumn(quesInfoMap, deletePblmList, columns[i],columnList);
  175. }
  176. continue;
  177. }
  178. }
  179. }
  180. if (deletePblmList != null && !deletePblmList.isEmpty()) {
  181. if (StringUtils.isNotBlank(rgstrId)) {
  182. StringBuilder pblmTypesId = new StringBuilder("");
  183. for (String itemId : deletePblmList) {
  184. List<BisInspItemQuesNumDto> bisInspItemQuesNumDtoList = bisInspItemQuesNumDao.getById(itemId,olBisInspOrg.getOrgId());
  185. if (bisInspItemQuesNumDtoList == null || bisInspItemQuesNumDtoList.isEmpty()) {
  186. continue;
  187. }
  188. bisInspItemQuesNumDtoList.forEach(bisInspItemQuesNumDto -> {
  189. List<String> snList = new ArrayList<>();
  190. if (StringUtils.isBlank(bisInspItemQuesNumDto.getQuesSn())) {
  191. return;
  192. }
  193. if (quesSnList.contains(bisInspItemQuesNumDto)) {
  194. return;
  195. }
  196. String[] snSplitList = bisInspItemQuesNumDto.getQuesSn().split(SplitValue.DOUHAO_SPLIT);
  197. if (snSplitList.length > 0) {
  198. for (int i = 0; i < snSplitList.length; i++) {
  199. if (snSplitList[i].contains(SplitValue.HENG_SPLIT)) {
  200. Integer startIndex = Integer.parseInt(snSplitList[i].split(SplitValue.HENG_SPLIT)[0].toString());
  201. Integer endIndex = Integer.parseInt(snSplitList[i].split(SplitValue.HENG_SPLIT)[1].toString());
  202. while (startIndex <= endIndex) {
  203. snList.add(startIndex.toString());
  204. startIndex++;
  205. }
  206. } else {
  207. snList.add(snSplitList[i]);
  208. }
  209. }
  210. } else {
  211. snList.add(bisInspItemQuesNumDto.getQuesSn());
  212. }
  213. Map<String, Object> param = new HashMap<>();
  214. //获取标准库中问题类别
  215. param.put("orgId",olBisInspOrg.getQuoteOrgId());
  216. param.put("type", fillIn.type());
  217. param.put("fileNum", bisInspItemQuesNumDto.getFileNum());
  218. param.put("sheetNum", bisInspItemQuesNumDto.getSheetNum());
  219. param.put("snList", snList);
  220. List<ObjInspPblms> pblmIds = objInspPblmsDao.getPblmsBySnAttTypeSort(param);
  221. if (pblmIds.size() > 0) {
  222. pblmIds.forEach(pblmTypeId -> {
  223. pblmTypesId.append("'").append(pblmTypeId.getGuid()).append("'").append(",");
  224. });
  225. }
  226. });
  227. }
  228. if (pblmTypesId.length() > 0 && StringUtils.isNotBlank(rgstrId)) {
  229. //删除问题
  230. BisInspPblmParam bisInspPblmParam = new BisInspPblmParam();
  231. bisInspPblmParam.setPblmsTypeId(pblmTypesId.substring(0,pblmTypesId.length() - 1));
  232. bisInspPblmParam.setObjType(fillIn.type());
  233. bisInspPblmParam.setRgstrId(rgstrId);
  234. int a = bisInspPblmDao.deletePblmByTypeId(bisInspPblmParam);
  235. }
  236. }
  237. }
  238. }
  239. }
  240. return pjp.proceed();
  241. }
  242. private void addChildrenColumn(Map<String, List<BisInspItemQuesInfoDto>> quesInfoMap, Set<String> deletePblmList, String childrenColumns,List<String> columnList) {
  243. String [] columns = childrenColumns.split(",");
  244. if (columns.length > 0) {
  245. for (String column : columns) {
  246. if (StringUtils.isBlank(column)) {
  247. continue;
  248. }
  249. if (quesInfoMap.containsKey(column)) {
  250. columnList.add(column);
  251. deletePblmList.addAll(quesInfoMap.get(column).stream().collect(Collectors.toMap(BisInspItemQuesInfoDto::getId, Function.identity())).keySet());
  252. }
  253. }
  254. } else {
  255. columnList.add(childrenColumns);
  256. deletePblmList.addAll(quesInfoMap.get(childrenColumns).stream().collect(Collectors.toMap(BisInspItemQuesInfoDto::getId, Function.identity())).keySet());
  257. }
  258. }
  259. }