Project.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. package com.bidizhaobiao.data.bigdata.persistence.orgproject.entity;
  2. import org.apache.commons.collections4.CollectionUtils;
  3. import org.neo4j.ogm.annotation.GeneratedValue;
  4. import org.neo4j.ogm.annotation.Id;
  5. import org.neo4j.ogm.annotation.NodeEntity;
  6. import org.neo4j.ogm.annotation.Property;
  7. import java.lang.reflect.Field;
  8. import java.lang.reflect.InvocationTargetException;
  9. import java.lang.reflect.Method;
  10. import java.util.*;
  11. @NodeEntity(label = "Project")
  12. public class Project {
  13. // -------------------------------------- 招中标共有的属性
  14. @Id
  15. @GeneratedValue
  16. private Long nodeId;
  17. // 项目名称,项目编号,专业分类,地区
  18. @Property(name = "project_name")
  19. private String projectName;
  20. @Property(name = "project_code")
  21. private String projectCode;
  22. @Property(name = "industry")
  23. private String industry;
  24. @Property(name = "info_type")
  25. private String infoType;
  26. @Property(name = "project_addr")
  27. private String projectAddr;
  28. // 项目归属地区
  29. @Property(name = "area")
  30. private String area;
  31. // 项目归属省份
  32. @Property(name = "province")
  33. private String province;
  34. // 项目归属城市
  35. @Property(name = "city")
  36. private String city;
  37. // 项目归属区县
  38. @Property(name = "district")
  39. private String district;
  40. @Property(name = "bidding_budget")
  41. // 招标预算价格
  42. private String biddingBudget;
  43. // 子项目编码、子项目名称、子项目名称集合
  44. @Property(name = "sub_project_code")
  45. private String subProjectCode;
  46. @Property(name = "sub_project_name")
  47. private String subProjectName;
  48. @Property(name = "sub_project_name_alias")
  49. private String subProjectNameAlias;
  50. private Integer upgradeStatus; // 这个属性用于旧数据的升级(null和0:待升级、-1:升级中、1:已升级)
  51. // 招标公告特有属性 招标标题/招标uuid/招标公告id/招标发布时间(已经被统一成yyyy-MM-dd格式了)
  52. @Property(name = "zhao_biao_name")
  53. private String zhaoBiaoName;
  54. @Property(name = "zhao_biao_uuid")
  55. private String zhaoBiaoUuid;
  56. @Property(name = "zhao_biao_id")
  57. private String zhaoBiaoId;
  58. @Property(name = "zhao_biao_page_time")
  59. private String zhaoBiaoPageTime;
  60. // 中标公告特有属性 中标标题/中标uuid/中标公告id/中标发布时间(已经被统一成yyyy-MM-dd格式了)/中标价格/是否废标公告
  61. @Property(name = "zhong_biao_name")
  62. private String zhongBiaoName;
  63. @Property(name = "zhong_biao_uuid")
  64. private String zhongBiaoUuid;
  65. @Property(name = "zhong_biao_id")
  66. private String zhongBiaoId;
  67. @Property(name = "zhong_biao_page_time")
  68. private String zhongBiaoPageTime;
  69. @Property(name = "win_bid_price")
  70. private String winBidPrice;
  71. @Property(name = "is_fei_biao")
  72. private String isFeiBiao;
  73. /**
  74. * 调用 addAllByExclude 时需要排除的属性
  75. */
  76. public Project() {
  77. this.isFeiBiao = "false";
  78. }
  79. public Long getNodeId() {
  80. return nodeId;
  81. }
  82. public void setNodeId(Long nodeId) {
  83. this.nodeId = nodeId;
  84. }
  85. public String getProjectName() {
  86. return projectName;
  87. }
  88. public void setProjectName(String projectName) {
  89. this.projectName = projectName;
  90. }
  91. public String getIndustry() {
  92. return industry;
  93. }
  94. public void setIndustry(String industry) {
  95. this.industry = industry;
  96. }
  97. public String getProjectAddr() {
  98. return projectAddr;
  99. }
  100. public void setProjectAddr(String projectAddr) {
  101. this.projectAddr = projectAddr;
  102. }
  103. public String getZhaoBiaoName() {
  104. return zhaoBiaoName;
  105. }
  106. public void setZhaoBiaoName(String zhaoBiaoName) {
  107. this.zhaoBiaoName = zhaoBiaoName;
  108. }
  109. public String getZhaoBiaoPageTime() {
  110. return zhaoBiaoPageTime;
  111. }
  112. public void setZhaoBiaoPageTime(String zhaoBiaoPageTime) {
  113. this.zhaoBiaoPageTime = zhaoBiaoPageTime;
  114. }
  115. public String getBiddingBudget() {
  116. return biddingBudget;
  117. }
  118. public void setBiddingBudget(String biddingBudget) {
  119. this.biddingBudget = biddingBudget;
  120. }
  121. public String getWinBidPrice() {
  122. return winBidPrice;
  123. }
  124. public void setWinBidPrice(String winBidPrice) {
  125. this.winBidPrice = winBidPrice;
  126. }
  127. public String getZhongBiaoName() {
  128. return zhongBiaoName;
  129. }
  130. public void setZhongBiaoName(String zhongBiaoName) {
  131. this.zhongBiaoName = zhongBiaoName;
  132. }
  133. public String getZhongBiaoPageTime() {
  134. return zhongBiaoPageTime;
  135. }
  136. public void setZhongBiaoPageTime(String zhongBiaoPageTime) {
  137. this.zhongBiaoPageTime = zhongBiaoPageTime;
  138. }
  139. public String getProjectCode() {
  140. return projectCode;
  141. }
  142. public void setProjectCode(String projectCode) {
  143. this.projectCode = projectCode;
  144. }
  145. public String getZhaoBiaoUuid() {
  146. return zhaoBiaoUuid;
  147. }
  148. public void setZhaoBiaoUuid(String zhaoBiaoUuid) {
  149. this.zhaoBiaoUuid = zhaoBiaoUuid;
  150. }
  151. public String getZhongBiaoUuid() {
  152. return zhongBiaoUuid;
  153. }
  154. public void setZhongBiaoUuid(String zhongBiaoUuid) {
  155. this.zhongBiaoUuid = zhongBiaoUuid;
  156. }
  157. public String getIsFeiBiao() {
  158. return isFeiBiao;
  159. }
  160. public void setIsFeiBiao(String isFeiBiao) {
  161. this.isFeiBiao = isFeiBiao;
  162. }
  163. public String getSubProjectName() {
  164. return subProjectName;
  165. }
  166. public void setSubProjectName(String subProjectName) {
  167. this.subProjectName = subProjectName;
  168. }
  169. public String getSubProjectNameAlias() {
  170. return subProjectNameAlias;
  171. }
  172. public void setSubProjectNameAlias(String subProjectNameAlias) {
  173. this.subProjectNameAlias = subProjectNameAlias;
  174. }
  175. public String getInfoType() {
  176. return infoType;
  177. }
  178. public void setInfoType(String infoType) {
  179. this.infoType = infoType;
  180. }
  181. public String getSubProjectCode() {
  182. return subProjectCode;
  183. }
  184. public void setSubProjectCode(String subProjectCode) {
  185. this.subProjectCode = subProjectCode;
  186. }
  187. public String getArea() {
  188. return area;
  189. }
  190. public void setArea(String area) {
  191. this.area = area;
  192. }
  193. public String getProvince() {
  194. return province;
  195. }
  196. public void setProvince(String province) {
  197. this.province = province;
  198. }
  199. public String getCity() {
  200. return city;
  201. }
  202. public void setCity(String city) {
  203. this.city = city;
  204. }
  205. public String getDistrict() {
  206. return district;
  207. }
  208. public void setDistrict(String district) {
  209. this.district = district;
  210. }
  211. public String getZhaoBiaoId() {
  212. return zhaoBiaoId;
  213. }
  214. public void setZhaoBiaoId(String zhaoBiaoId) {
  215. this.zhaoBiaoId = zhaoBiaoId;
  216. }
  217. public String getZhongBiaoId() {
  218. return zhongBiaoId;
  219. }
  220. public void setZhongBiaoId(String zhongBiaoId) {
  221. this.zhongBiaoId = zhongBiaoId;
  222. }
  223. public Integer getUpgradeStatus() {
  224. return upgradeStatus;
  225. }
  226. public void setUpgradeStatus(Integer upgradeStatus) {
  227. this.upgradeStatus = upgradeStatus;
  228. }
  229. /**
  230. * 获取文档的uuid(招标uuid或者中标uuid)
  231. * @return
  232. */
  233. public String getUuid() {
  234. return zhaoBiaoUuid != null ? zhaoBiaoUuid : zhongBiaoUuid;
  235. }
  236. /**
  237. * 加入招标公告特有的属性
  238. * @param project {@link Project}
  239. */
  240. public void addZhaoBiaoElement(Project project) {
  241. if (project != null) {
  242. try {
  243. addAllByExclude(project, null);
  244. } catch (Exception e) {
  245. e.printStackTrace();
  246. }
  247. this.setZhaoBiaoName(project.getZhaoBiaoName());
  248. this.setZhaoBiaoUuid(project.getZhaoBiaoUuid());
  249. this.setZhaoBiaoId(project.getZhaoBiaoId());
  250. this.setZhaoBiaoPageTime(project.getZhaoBiaoPageTime());
  251. }
  252. }
  253. /**
  254. * 加入中标公告特有的属性
  255. * @param project {@link Project}
  256. */
  257. public void addZhongBiaoElement(Project project) {
  258. if (project != null) {
  259. try {
  260. addAllByExclude(project, null);
  261. } catch (Exception e) {
  262. e.printStackTrace();
  263. }
  264. this.setZhongBiaoName(project.getZhongBiaoName());
  265. this.setZhongBiaoUuid(project.getZhongBiaoUuid());
  266. this.setZhongBiaoId(project.getZhongBiaoId());
  267. this.setZhongBiaoPageTime(project.getZhongBiaoPageTime());
  268. this.setWinBidPrice(project.getWinBidPrice());
  269. this.setIsFeiBiao(project.getIsFeiBiao());
  270. }
  271. }
  272. /**
  273. * 加入招中标共有的属性
  274. * @param project {@link Project}
  275. */
  276. private void addCommonElement(Project project) {
  277. if (project != null) {
  278. this.setProjectName(project.getProjectName());
  279. this.setProjectCode(project.getProjectCode());
  280. this.setIndustry(project.getIndustry());
  281. this.setInfoType(project.getInfoType());
  282. this.setProjectAddr(project.getProjectAddr());
  283. this.setArea(project.getArea());
  284. this.setProvince(project.getProvince());
  285. this.setCity(project.getCity());
  286. this.setDistrict(project.getDistrict());
  287. this.setBiddingBudget(project.getBiddingBudget());
  288. this.setSubProjectCode(project.getSubProjectCode());
  289. this.setSubProjectName(project.getSubProjectName());
  290. this.setSubProjectNameAlias(project.getSubProjectNameAlias());
  291. this.setUpgradeStatus(project.getUpgradeStatus());
  292. }
  293. }
  294. private List<String> defaultExcludeFields() {
  295. List<String> excludeFields = new LinkedList<>();
  296. excludeFields.add("nodeId");
  297. // 招标属性
  298. excludeFields.add("zhaoBiaoName");
  299. excludeFields.add("zhaoBiaoUuid");
  300. excludeFields.add("zhaoBiaoId");
  301. excludeFields.add("zhaoBiaoPageTime");
  302. // 中标属性
  303. excludeFields.add("zhongBiaoName");
  304. excludeFields.add("zhongBiaoUuid");
  305. excludeFields.add("zhongBiaoId");
  306. excludeFields.add("zhongBiaoPageTime");
  307. excludeFields.add("winBidPrice");
  308. excludeFields.add("isFeiBiao");
  309. return excludeFields;
  310. }
  311. /**
  312. * 把 project 不为空的属性(excludeFields的属性除外除外)赋值给当前对象的对应属性
  313. * @param project 目标项目
  314. * @throws InvocationTargetException
  315. * @throws IllegalAccessException
  316. * @throws NoSuchMethodException
  317. */
  318. public void addAllByExclude(Project project, List<String> excludeFields) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
  319. if (CollectionUtils.isEmpty(excludeFields)) {
  320. excludeFields = defaultExcludeFields();
  321. }
  322. Field[] projectFields = project.getClass().getDeclaredFields();
  323. Field[] thisFields = this.getClass().getDeclaredFields();
  324. Map<String, Field> thisFieldMap = new HashMap<>();
  325. for (Field thisField : thisFields) {
  326. thisFieldMap.put(thisField.getName(), thisField);
  327. }
  328. for (Field projectField : projectFields) {
  329. String projectFieldName = projectField.getName();
  330. if (excludeFields.contains(projectFieldName)) {
  331. continue;
  332. }
  333. Field thisField = thisFieldMap.get(projectFieldName);
  334. thisField.setAccessible(true);
  335. projectField.setAccessible(true);
  336. if (thisField != null && projectField.get(project) != null) {
  337. Method thisMethod = this.getClass().getMethod("set" + projectFieldName.substring(0, 1).toUpperCase() + projectFieldName.substring(1), projectField.getType());
  338. thisMethod.invoke(this, projectField.get(project));
  339. }
  340. }
  341. }
  342. /**
  343. * 更新此项目的所有属性(全部以project为准,除了nodeId属性)
  344. * @param project
  345. * @throws InvocationTargetException
  346. * @throws IllegalAccessException
  347. * @throws NoSuchMethodException
  348. */
  349. public void updateAll(Project project) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
  350. Field[] newFields = project.getClass().getDeclaredFields();
  351. Field[] thisFields = this.getClass().getDeclaredFields();
  352. for (Field newField : newFields) {
  353. String newFieldName = newField.getName();
  354. if (newFieldName.equals("nodeId")) {
  355. continue;
  356. }
  357. for (Field thisField : thisFields) {
  358. String thisFieldName = thisField.getName();
  359. if (thisFieldName.equals(newFieldName)) {
  360. thisField.setAccessible(true);
  361. newField.setAccessible(true);
  362. Method thisMethod = this.getClass().getMethod("set" + thisFieldName.substring(0, 1).toUpperCase() + thisFieldName.substring(1), newField.getType());
  363. thisMethod.invoke(this, newField.get(project));
  364. }
  365. }
  366. }
  367. }
  368. }