SettementUtil.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. package com.jeeplus.modules.sg.overheadline.util;
  2. import com.jeeplus.common.utils.StringUtils;
  3. import com.jeeplus.common.utils.excel.ImportExcel;
  4. import com.jeeplus.common.utils.sg.ExcelUtil;
  5. import com.jeeplus.modules.sg.overheadline.entity.Settlement;
  6. import org.springframework.web.multipart.MultipartFile;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. public class SettementUtil {
  10. public static final String RESON_TRUE="&nbsp;金额<span style='color:#0000FF'>&nbsp;一致。</span>";
  11. public static final String RESON_FLASE="&nbsp;金额<span style='color:#FF0000'>&nbsp;不一致。</span>";
  12. /*
  13. 分布分项比对
  14. */
  15. public static final String RESON_FBFX1="《工程项目竣工结算汇总表》中“分部分项工程费”为<span style='font-weight: bold;'>xxx</span>元,";
  16. public static final String RESON_FBFX2="《架空线路工程费用汇总表》中“分部分项汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  17. public static final String RESON_FBFX3="《分布分项工程量清单计价表》中“分部分项汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  18. //电缆
  19. public static final String RESON_JZFBFX="《电缆线路建筑工程费用汇总表》中“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  20. public static final String RESON_AZFBFX="《电缆线路安装工程费用汇总表》中“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  21. public static final String RESON_JZFBFX3="《建筑分布分项工程量清单计价表》中“分部分项汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  22. public static final String RESON_AZFBFX3="《安装分布分项工程量清单计价表》中“分部分项汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  23. /*
  24. 承包人采购比对
  25. */
  26. public static final String RESON_CBRF="《工程项目竣工结算汇总表》中“承包人采购设备费”为<span style='font-weight: bold;'>xxx</span>元,";
  27. public static final String RESON_CBRF1="《承包人采购设备计价表》中“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  28. /*
  29. 措施费比对
  30. */
  31. public static final String RESON_CSXM="《工程项目竣工结算汇总表》中“措施项目费”为<span style='font-weight: bold;'>xxx</span>元,";
  32. public static final String RESON_CSXM1="《措施项目清单计价表(一)》的“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  33. public static final String RESON_CSXM2="《措施项目清单计价表(二)》的“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  34. public static final String RESON_CSXM3="&nbsp;措施费总合计金额为<span style='font-weight: bold;'>xxx</span>元,";
  35. /*
  36. 其他项目费比对
  37. */
  38. public static final String RESON_QTXM="《工程项目竣工结算汇总表》中“其他项目费”为<span style='font-weight: bold;'>xxx</span>元,";
  39. public static final String RESON_QTXM1="《其他项目清单计价表》中“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  40. /*
  41. 规费比对
  42. */
  43. public static final String RESON_GF="《工程项目竣工结算汇总表》中“规费”为<span style='font-weight: bold;'>xxx</span>元,";
  44. public static final String RESON_GF1="《规费项目清单计价表》中“合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  45. /*
  46. 税率 不验证
  47. */
  48. public static final String RESON_SJ="《工程项目竣工结算汇总表》中税金 (税率: 9%)";
  49. /*
  50. 发包人采购费
  51. */
  52. public static final String RESON_FBRF="《工程项目竣工结算汇总表》中“发包人采购材料费”为<span style='font-weight: bold;'>xxx</span>元,";
  53. public static final String RESON_FBRF1="《分布分项工程量清单计价表》中“发包人采购汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  54. //电缆
  55. public static final String RESON_DLFBRF1="《建筑分布分项工程量清单计价表》中“发包人采购汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  56. public static final String RESON_DLFBRF2="《安装分布分项工程量清单计价表》中“发包人采购汇总金额”为<span style='font-weight: bold;'>xxx</span>元,";
  57. /*
  58. 竣工结算
  59. */
  60. public static final String RESON_JGJS="《工程项目竣工结算汇总表》中“竣工结算价合计金额”为<span style='font-weight: bold;'>xxx</span>元,";
  61. public static final String RESON_JGJS1="&nbsp;分部分项工程费为<span style='font-weight: bold;'>xxx</span>元,";
  62. public static final String RESON_JGJS2="&nbsp;承包人采购设备费为<span style='font-weight: bold;'>xxx</span>元,";
  63. public static final String RESON_JGJS3="&nbsp;措施项目费为<span style='font-weight: bold;'>xxx</span>元,";
  64. public static final String RESON_JGJS4="&nbsp;其他项目费为<span style='font-weight: bold;'>xxx</span>元,";
  65. public static final String RESON_JGJS5="&nbsp;规费为<span style='font-weight: bold;'>xxx</span>元,";
  66. public static final String RESON_JGJS6="&nbsp;税金为<span style='font-weight: bold;'>xxx</span>元,";
  67. public static final String RESON_JGJS7="&nbsp;发包人材料费为<span style='font-weight: bold;'>xxx</span>元,";
  68. public static final String RESON_JGJS8="&nbsp;汇总金额为<span style='font-weight: bold;'>xxx</span>元,";
  69. /*
  70. 增补税率差额
  71. */
  72. public static final String RESON_BZZS="补增值税税率调整差额";
  73. public static final String RESON_KJJG="扣减甲供材超供材料费";
  74. /*
  75. 工程结算
  76. */
  77. public static final String RESON_GCJS="《工程项目竣工结算汇总表》中“工程结算价”为<span style='font-weight: bold;'>xxx</span>元,";
  78. public static final String RESON_GCJS1="&nbsp;竣工结算家合计为<span style='font-weight: bold;'>xxx</span>元,";
  79. public static final String RESON_GCJS2="&nbsp;补增值税税率调整差额为<span style='font-weight: bold;'>xxx</span>元,";
  80. public static final String RESON_GCJS3="&nbsp;扣减甲供材超供材料费为<span style='font-weight: bold;'>xxx</span>元,";
  81. public static final String RESON_GCJS4="&nbsp;汇总金额为<span style='font-weight: bold;'>xxx</span>元,";
  82. /**
  83. * 查找架空匹配
  84. */
  85. public static List<Settlement> getSelectSettlement(List<Settlement> settlementList){
  86. boolean[] booleans =getJgforJoint(settlementList);
  87. String key="";
  88. String reason="";
  89. for(Settlement settlement:settlementList){
  90. key = settlement.getEntryName();
  91. switch (key){
  92. case BashInfo.JS_FBFX:
  93. reason = getFbfxJoint(settlement);
  94. settlement.setReason(reason);
  95. break;
  96. case BashInfo.JS_CBRF:
  97. reason = getJoint(RESON_CBRF,RESON_CBRF1,settlement);
  98. settlement.setReason(reason);
  99. break;
  100. case BashInfo.JS_CSXM:
  101. reason =getCsfJoint(settlement);
  102. settlement.setReason(reason);
  103. break;
  104. case BashInfo.JS_QTXM:
  105. reason=getJoint(RESON_QTXM,RESON_QTXM1,settlement);
  106. settlement.setReason(reason);
  107. break;
  108. case BashInfo.JS_GF:
  109. reason=getJoint(RESON_GF,RESON_GF1,settlement);
  110. settlement.setReason(reason);
  111. break;
  112. case BashInfo.JS_SJ:
  113. reason=RESON_SJ;
  114. settlement.setReason(reason);
  115. break;
  116. case BashInfo.JS_FBRF:
  117. reason=getJoint(RESON_FBRF,RESON_FBRF1,settlement);
  118. settlement.setReason(reason);
  119. break;
  120. case BashInfo.JS_JGJS:
  121. reason = getJgJoint(settlement,booleans);
  122. settlement.setReason(reason);
  123. break;
  124. case BashInfo.JS_BZZS:
  125. reason=RESON_BZZS;
  126. settlement.setReason(reason);
  127. break;
  128. case BashInfo.JS_KJJG:
  129. reason=RESON_BZZS;
  130. settlement.setReason(reason);
  131. break;
  132. case BashInfo.GCJS:
  133. reason=getJshzJoint(settlement,booleans);
  134. settlement.setReason(reason);
  135. break;
  136. }
  137. }
  138. return settlementList;
  139. }
  140. /**
  141. * 获取工程结算价
  142. */
  143. public static List<Settlement> getComparison(ImportExcel importExcel){
  144. Settlement settlement;
  145. List<Settlement> settlementList = new ArrayList<Settlement>();
  146. int lastDataRowNum = importExcel.getLastDataRowNum();
  147. String key = "";//获取结算名称
  148. for (int i = 0; i < lastDataRowNum; i++) {
  149. settlement=new Settlement();
  150. key = importExcel.getValue(i+1,1);
  151. if(key.contains(BashInfo.JS_SJ)){
  152. key=BashInfo.JS_SJ;
  153. }
  154. switch (key){
  155. case BashInfo.JS_FBFX:
  156. settlement.setEntryName(key);
  157. settlement.setMoney(importExcel.getDouble(i+1,2));
  158. settlement.setRemarks(importExcel.getValue(i+1,3));
  159. settlementList.add(settlement);
  160. break;
  161. case BashInfo.JS_CBRF:
  162. settlement.setEntryName(key);
  163. settlement.setMoney(importExcel.getDouble(i+1,2));
  164. settlement.setRemarks(importExcel.getValue(i+1,3));
  165. settlementList.add(settlement);
  166. break;
  167. case BashInfo.JS_CSXM:
  168. settlement.setEntryName(key);
  169. settlement.setMoney(importExcel.getDouble(i+1,2));
  170. settlement.setRemarks(importExcel.getValue(i+1,3));
  171. settlementList.add(settlement);
  172. break;
  173. case BashInfo.JS_QTXM:
  174. settlement.setEntryName(key);
  175. settlement.setMoney(importExcel.getDouble(i+1,2));
  176. settlement.setRemarks(importExcel.getValue(i+1,3));
  177. settlementList.add(settlement);
  178. break;
  179. case BashInfo.JS_GF:
  180. settlement.setEntryName(key);
  181. settlement.setMoney(importExcel.getDouble(i+1,2));
  182. settlement.setRemarks(importExcel.getValue(i+1,3));
  183. settlementList.add(settlement);
  184. break;
  185. case BashInfo.JS_SJ:
  186. settlement.setEntryName(key);
  187. settlement.setMoney(importExcel.getDouble(i+1,2));
  188. settlement.setRemarks(importExcel.getValue(i+1,3));
  189. settlementList.add(settlement);
  190. break;
  191. case BashInfo.JS_FBRF:
  192. settlement.setEntryName(key);
  193. settlement.setMoney(importExcel.getDouble(i+1,2));
  194. settlement.setRemarks(importExcel.getValue(i+1,3));
  195. settlementList.add(settlement);
  196. break;
  197. case BashInfo.JS_JGJS:
  198. settlement.setEntryName(key);
  199. settlement.setMoney(importExcel.getDouble(i+1,2));
  200. settlement.setRemarks(importExcel.getValue(i+1,3));
  201. settlementList.add(settlement);
  202. break;
  203. case BashInfo.JS_BZZS:
  204. settlement.setEntryName(key);
  205. settlement.setMoney(importExcel.getDouble(i+1,2));
  206. settlement.setRemarks(importExcel.getValue(i+1,3));
  207. settlementList.add(settlement);
  208. break;
  209. case BashInfo.JS_KJJG:
  210. settlement.setEntryName(key);
  211. settlement.setMoney(importExcel.getDouble(i+1,2));
  212. settlement.setRemarks(importExcel.getValue(i+1,3));
  213. settlementList.add(settlement);
  214. break;
  215. case BashInfo.JS_GCJS:
  216. settlement.setEntryName(key);
  217. settlement.setMoney(importExcel.getDouble(i+1,2));
  218. settlement.setRemarks(importExcel.getValue(i+1,3));
  219. settlementList.add(settlement);
  220. break;
  221. }
  222. }
  223. return settlementList;
  224. }
  225. /**
  226. * 结算汇总数据校验
  227. * @param settlements 工程竣工结算list集合
  228. * @param builtTotal 获取架空线路工程费用汇总表 分部分项 合计
  229. * @param divisiontotal 获取分部分项比对数据清单
  230. * @param wordtotal1 //获取措施费清单计价表1
  231. * @param wordtotal2 //获取措施费清单计价表2
  232. * @param otherTotal 获取其他项目费合计
  233. * @param feescount 获取规费合计
  234. * @param cbperson 获取承包人采购合计
  235. * @return
  236. */
  237. /*
  238. 架空校验
  239. */
  240. public static List<Settlement> getComparison(List<Settlement> settlements, double builtTotal, double[] divisiontotal, double wordtotal1,double wordtotal2, double otherTotal, double feescount,double cbperson){
  241. double wordtotal=wordtotal1+wordtotal2;//措施费相加
  242. String name;//获取当前汇总表名称
  243. double money;//获取当前汇总表金额
  244. Settlement settlement;//对象
  245. for (int i = 0; i < settlements.size(); i++) {
  246. settlement=settlements.get(i);
  247. name=settlement.getEntryName();
  248. money=settlement.getMoney();
  249. settlement.setStatus("1");
  250. switch (name){
  251. case BashInfo.JS_FBFX:
  252. if (money==builtTotal&&money==divisiontotal[0]){
  253. settlement.setStatus("0");
  254. }
  255. settlement.setTheAmount(String.valueOf(builtTotal+","+divisiontotal[0]));
  256. break;
  257. case BashInfo.JS_CBRF:
  258. if(money==cbperson){
  259. settlement.setStatus("0");
  260. }
  261. settlement.setTheAmount(String.valueOf(cbperson));
  262. break;
  263. case BashInfo.JS_CSXM:
  264. if (money==wordtotal){
  265. settlement.setStatus("0");
  266. }
  267. settlement.setTheAmount(String.valueOf(wordtotal1+","+wordtotal2+","+wordtotal));
  268. break;
  269. case BashInfo.JS_QTXM:
  270. if(money==otherTotal){
  271. settlement.setStatus("0");
  272. }
  273. settlement.setTheAmount(String.valueOf(otherTotal));
  274. break;
  275. case BashInfo.JS_GF:
  276. if (money==feescount){
  277. settlement.setStatus("0");
  278. }
  279. settlement.setTheAmount(String.valueOf(feescount));
  280. break;
  281. case BashInfo.JS_SJ:
  282. settlement.setStatus("2");
  283. settlement.setTheAmount(String.valueOf(money));
  284. break;
  285. case BashInfo.JS_FBRF:
  286. if(money==divisiontotal[1]){
  287. settlement.setStatus("0");
  288. }
  289. settlement.setTheAmount(String.valueOf(divisiontotal[1]));
  290. break;
  291. case BashInfo.JS_JGJS:
  292. double[] jgComparison = getJgjsComparison(settlements);
  293. if (money==jgComparison[0]){
  294. settlement.setStatus("0");
  295. }
  296. settlement.setTheAmount(StringUtils.join(jgComparison,','));
  297. break;
  298. case BashInfo.JS_BZZS:
  299. settlement.setStatus("2");
  300. settlement.setTheAmount(String.valueOf(money));
  301. break;
  302. case BashInfo.JS_KJJG:
  303. settlement.setStatus("2");
  304. settlement.setTheAmount(String.valueOf(money));
  305. break;
  306. case BashInfo.JS_GCJS:
  307. double[] gcComparison =getGcComparison(settlements);
  308. if (money==gcComparison[0]){
  309. settlement.setStatus("0");
  310. }
  311. settlement.setTheAmount(StringUtils.join(gcComparison,','));
  312. break;
  313. }
  314. }
  315. return settlements;
  316. }
  317. /*
  318. 计算与竣工结算价合计比对结果
  319. */
  320. public static double[] getJgjsComparison(List<Settlement> settlements){
  321. double[] doubles = new double[8];
  322. String name;
  323. double money=0;
  324. for (Settlement settlement:settlements){
  325. name = settlement.getEntryName();
  326. money =settlement.getMoney();
  327. switch (name) {
  328. case BashInfo.JS_FBFX:
  329. doubles[1]=money;
  330. break;
  331. case BashInfo.JS_CBRF:
  332. doubles[2]=money;
  333. break;
  334. case BashInfo.JS_CSXM:
  335. doubles[3]=money;
  336. break;
  337. case BashInfo.JS_QTXM:
  338. doubles[4]=money;
  339. break;
  340. case BashInfo.JS_GF:
  341. doubles[5]=money;
  342. break;
  343. case BashInfo.JS_SJ:
  344. doubles[6]=money;
  345. break;
  346. case BashInfo.JS_FBRF:
  347. doubles[7]=money;
  348. }
  349. }
  350. doubles[0]=doubles[1]+doubles[2]+doubles[3]+doubles[4]+doubles[5]+doubles[6]-doubles[7];
  351. return doubles;
  352. }
  353. /*
  354. 工程结算价比对结果
  355. */
  356. public static double[] getGcComparison(List<Settlement> settlements){
  357. double[] doubles=new double[4];
  358. String name;
  359. double money=0;
  360. for (Settlement settlement:settlements){
  361. name = settlement.getEntryName();
  362. money =settlement.getMoney();
  363. switch (name) {
  364. case BashInfo.JS_JGJS://竣工结算
  365. doubles[1]=money;
  366. break;
  367. case BashInfo.JS_BZZS://补增值税
  368. doubles[2]=money;
  369. break;
  370. case BashInfo.JS_KJJG://扣减
  371. doubles[3]=money;
  372. break;
  373. }
  374. }
  375. doubles[0]=doubles[1]+doubles[2]-doubles[3];
  376. return doubles;
  377. }
  378. /*
  379. 常量拼接
  380. */
  381. public static String getJoint(String constant1,String constant2,Settlement settlement){
  382. String reason="";
  383. String status=settlement.getStatus();
  384. reason=constant1.replace("xxx",String.valueOf(settlement.getMoney()))
  385. +"<br>"+constant2.replace("xxx",settlement.getTheAmount());
  386. if (status.equals("0")){
  387. reason+="<br>"+SettementUtil.RESON_TRUE;
  388. }else {
  389. reason+="<br>"+SettementUtil.RESON_FLASE;
  390. }
  391. return reason;
  392. }
  393. /*
  394. 竣工结算拼接
  395. */
  396. public static String getJgJoint(Settlement settlement,boolean[] booleans){
  397. String reason="";
  398. String[] amout=settlement.getTheAmount().split(",");
  399. reason+=RESON_JGJS.replace("xxx",String.valueOf(settlement.getMoney()));
  400. if (booleans[1]){
  401. reason+="<br>"+RESON_JGJS1.replace("xxx",amout[1]);
  402. }
  403. if (booleans[2]){
  404. reason+="<br>"+RESON_JGJS2.replace("xxx",amout[2]);
  405. }
  406. if (booleans[3]){
  407. reason+="<br>"+RESON_JGJS3.replace("xxx",amout[3]);
  408. }
  409. if (booleans[4]){
  410. reason+="<br>"+RESON_JGJS4.replace("xxx",amout[4]);
  411. }
  412. if (booleans[5]){
  413. reason+="<br>"+RESON_JGJS5.replace("xxx",amout[5]);
  414. }
  415. if (booleans[6]){
  416. reason+="<br>"+RESON_JGJS6.replace("xxx",amout[6]);
  417. }
  418. if (booleans[7]){
  419. reason+="<br>"+RESON_JGJS7.replace("xxx",amout[7]);
  420. }
  421. reason+="<br>"+RESON_JGJS8.replace("xxx",amout[0]);
  422. if (settlement.getStatus().equals("0")){
  423. reason+="<br>"+SettementUtil.RESON_TRUE;
  424. }else {
  425. reason+="<br>"+SettementUtil.RESON_FLASE;
  426. }
  427. return reason;
  428. }
  429. /*
  430. 架空分布分项工程费对比
  431. */
  432. public static String getFbfxJoint(Settlement settlement){
  433. String reason="";
  434. String[] amout=settlement.getTheAmount().split(",");
  435. String reason1=SettementUtil.RESON_FBFX1.replace("xxx",String.valueOf(settlement.getMoney()))+"<br>"+SettementUtil.RESON_FBFX2.replace("xxx",amout[0]);
  436. String reason2=SettementUtil.RESON_FBFX2.replace("xxx",amout[0])+"<br>"+SettementUtil.RESON_FBFX3.replace("xxx",amout[1]);
  437. String status =settlement.getStatus();
  438. if(status.equals("0")){
  439. reason=reason1+"<br>"+SettementUtil.RESON_TRUE+"<br>"+reason2+"<br>"+SettementUtil.RESON_TRUE;
  440. }
  441. if(status.equals("1")){
  442. double money = settlement.getMoney();
  443. double amout1 = Double.valueOf(amout[0]);
  444. double amout2 = Double.valueOf(amout[1]);
  445. if(money!=amout1&&amout1!=amout2){
  446. reason=reason1+"<br>"+SettementUtil.RESON_FLASE+"<br>"+reason2+"<br>"+SettementUtil.RESON_FLASE;
  447. }
  448. if(amout1!=amout2&&money==amout1){
  449. reason=reason1+"<br>"+SettementUtil.RESON_TRUE+"<br>"+reason2+"<br>"+SettementUtil.RESON_FLASE;
  450. }
  451. if (money!=amout1&&amout1==amout2){
  452. reason=reason1+"<br>"+SettementUtil.RESON_TRUE+"<br>"+reason2+"<br>"+SettementUtil.RESON_TRUE;
  453. }
  454. }
  455. return reason;
  456. }
  457. /*
  458. 措施费对比
  459. */
  460. public static String getCsfJoint(Settlement settlement){
  461. String status =settlement.getStatus();
  462. String[] amout=settlement.getTheAmount().split(",");
  463. String reason=RESON_CSXM.replace("xxx",String.valueOf(settlement.getMoney()))
  464. +"<br>"+RESON_CSXM1.replace("xxx",amout[0])+
  465. "<br>"+RESON_CSXM2.replace("xxx",amout[1])+
  466. "<br>"+RESON_CSXM3.replace("xxx",amout[2]);
  467. if (status.equals("0")){
  468. reason+="<br>"+RESON_TRUE;
  469. }else {
  470. reason+="<br>"+RESON_FLASE;
  471. }
  472. return reason;
  473. }
  474. /*
  475. 结算汇总拼接
  476. */
  477. public static String getJshzJoint(Settlement settlement,boolean[] booleans){
  478. String reason="";
  479. String[] amout=settlement.getTheAmount().split(",");
  480. reason+=RESON_GCJS.replace("xxx",String.valueOf(settlement.getMoney()));
  481. if (booleans[8]){
  482. reason+="<br>"+RESON_GCJS1.replace("xxx",amout[1]);
  483. }
  484. if (booleans[9]){
  485. reason+="<br>"+RESON_GCJS2.replace("xxx",amout[2]);
  486. }
  487. if (booleans[10]) {
  488. reason += "<br>" + RESON_GCJS3.replace("xxx", amout[3]);
  489. }
  490. reason+="<br>"+RESON_GCJS4.replace("xxx",amout[0]);
  491. if (settlement.getStatus().equals("0")){
  492. reason+="<br>"+SettementUtil.RESON_TRUE;
  493. }else {
  494. reason+="<br>"+SettementUtil.RESON_FLASE;
  495. }
  496. return reason;
  497. }
  498. /*
  499. 获取《工程竣工对比是否存在》
  500. */
  501. public static boolean[] getJgforJoint(List<Settlement> settlements){
  502. String key;
  503. boolean[] booleans = new boolean[11];
  504. for (int i = 0; i < booleans.length; i++) {
  505. booleans[i]=false;
  506. }
  507. for (int i = 0; i < settlements.size(); i++) {
  508. key = settlements.get(i).getEntryName();
  509. switch (key){
  510. case BashInfo.JS_FBFX:
  511. booleans[1]=true;
  512. break;
  513. case BashInfo.JS_CBRF:
  514. booleans[2]=true;
  515. break;
  516. case BashInfo.JS_CSXM:
  517. booleans[3]=true;
  518. break;
  519. case BashInfo.JS_QTXM:
  520. booleans[4]=true;
  521. break;
  522. case BashInfo.JS_GF:
  523. booleans[5]=true;
  524. break;
  525. case BashInfo.JS_SJ:
  526. booleans[6]=true;
  527. break;
  528. case BashInfo.JS_FBRF:
  529. booleans[7]=true;
  530. break;
  531. case BashInfo.JS_JGJS://竣工结算
  532. booleans[8]=true;
  533. break;
  534. case BashInfo.JS_BZZS://补增值税
  535. booleans[9]=true;
  536. break;
  537. case BashInfo.JS_KJJG://扣减
  538. booleans[10]=true;
  539. break;
  540. }
  541. }
  542. return booleans;
  543. }
  544. /*
  545. // 电缆校验
  546. // */
  547. public static List<Settlement> getDLComparison(List<Settlement> settlements, double builtTotal[], double[] divisiontotal, double wordtotal1,double wordtotal2, double otherTotal, double feescount,double cbperson){
  548. double wordtotal=wordtotal1+wordtotal2;//措施费相加
  549. String name;//获取当前汇总表名称
  550. double money;//获取当前汇总表金额
  551. Settlement settlement;//对象
  552. for (int i = 0; i < settlements.size(); i++) {
  553. settlement=settlements.get(i);
  554. name=settlement.getEntryName();
  555. money=settlement.getMoney();
  556. settlement.setStatus("1");
  557. switch (name){
  558. case BashInfo.JS_FBFX:
  559. double division=divisiontotal[0]+divisiontotal[2];
  560. double built = builtTotal[0]+builtTotal[1];
  561. if (money==built&&money==division){
  562. settlement.setStatus("0");
  563. }
  564. settlement.setTheAmount(String.valueOf(built+","+division+","+builtTotal[0]+","+builtTotal[1]+","+divisiontotal[0]+","+divisiontotal[2]));
  565. break;
  566. case BashInfo.JS_CBRF:
  567. if(money==cbperson){
  568. settlement.setStatus("0");
  569. }
  570. settlement.setTheAmount(String.valueOf(cbperson));
  571. break;
  572. case BashInfo.JS_CSXM:
  573. if (money==wordtotal){
  574. settlement.setStatus("0");
  575. }
  576. settlement.setTheAmount(String.valueOf(wordtotal1+","+wordtotal2+","+wordtotal));
  577. break;
  578. case BashInfo.JS_QTXM:
  579. if(money==otherTotal){
  580. settlement.setStatus("0");
  581. }
  582. settlement.setTheAmount(String.valueOf(otherTotal));
  583. break;
  584. case BashInfo.JS_GF:
  585. if (money==feescount){
  586. settlement.setStatus("0");
  587. }
  588. settlement.setTheAmount(String.valueOf(feescount));
  589. break;
  590. case BashInfo.JS_SJ:
  591. settlement.setStatus("2");
  592. settlement.setTheAmount(String.valueOf(money));
  593. break;
  594. case BashInfo.JS_FBRF:
  595. double divisionFbr =divisiontotal[1]+divisiontotal[3];
  596. if(money==divisiontotal[1]){
  597. settlement.setStatus("0");
  598. }
  599. settlement.setTheAmount(String.valueOf(divisionFbr+','+divisiontotal[1]+","+divisiontotal[3]));
  600. break;
  601. case BashInfo.JS_JGJS:
  602. double[] jgComparison = getJgjsComparison(settlements);
  603. if (money==jgComparison[0]){
  604. settlement.setStatus("0");
  605. }
  606. settlement.setTheAmount(StringUtils.join(jgComparison,','));
  607. break;
  608. case BashInfo.JS_BZZS:
  609. settlement.setStatus("2");
  610. settlement.setTheAmount(String.valueOf(money));
  611. break;
  612. case BashInfo.JS_KJJG:
  613. settlement.setStatus("2");
  614. settlement.setTheAmount(String.valueOf(money));
  615. break;
  616. case BashInfo.JS_GCJS:
  617. double[] gcComparison =getGcComparison(settlements);
  618. if (money==gcComparison[0]){
  619. settlement.setStatus("0");
  620. }
  621. settlement.setTheAmount(StringUtils.join(gcComparison,','));
  622. break;
  623. }
  624. }
  625. return settlements;
  626. }
  627. /**
  628. * 查找电缆匹配
  629. */
  630. public static List<Settlement> getSelectDlSettlement(List<Settlement> settlementList){
  631. boolean[] booleans =getJgforJoint(settlementList);
  632. String key="";
  633. String reason="";
  634. for(Settlement settlement:settlementList){
  635. key = settlement.getEntryName();
  636. switch (key){
  637. case BashInfo.JS_FBFX:
  638. reason = getFbfxJoint(settlement);
  639. settlement.setReason(reason);
  640. break;
  641. case BashInfo.JS_CBRF:
  642. reason = getJoint(RESON_CBRF,RESON_CBRF1,settlement);
  643. settlement.setReason(reason);
  644. break;
  645. case BashInfo.JS_CSXM:
  646. reason =getCsfJoint(settlement);
  647. settlement.setReason(reason);
  648. break;
  649. case BashInfo.JS_QTXM:
  650. reason=getJoint(RESON_QTXM,RESON_QTXM1,settlement);
  651. settlement.setReason(reason);
  652. break;
  653. case BashInfo.JS_GF:
  654. reason=getJoint(RESON_GF,RESON_GF1,settlement);
  655. settlement.setReason(reason);
  656. break;
  657. case BashInfo.JS_SJ:
  658. reason=RESON_SJ;
  659. settlement.setReason(reason);
  660. break;
  661. case BashInfo.JS_FBRF:
  662. reason=getJoint(RESON_FBRF,RESON_FBRF1,settlement);
  663. settlement.setReason(reason);
  664. break;
  665. case BashInfo.JS_JGJS:
  666. reason = getJgJoint(settlement,booleans);
  667. settlement.setReason(reason);
  668. break;
  669. case BashInfo.JS_BZZS:
  670. reason=RESON_BZZS;
  671. settlement.setReason(reason);
  672. break;
  673. case BashInfo.JS_KJJG:
  674. reason=RESON_BZZS;
  675. settlement.setReason(reason);
  676. break;
  677. case BashInfo.GCJS:
  678. reason=getJshzJoint(settlement,booleans);
  679. settlement.setReason(reason);
  680. break;
  681. }
  682. }
  683. return settlementList;
  684. }
  685. /*
  686. 电缆分布分项工程费对比
  687. */
  688. public static String getDJoint(Settlement settlement){
  689. String reason="";
  690. String[] amout=settlement.getTheAmount().split(",");
  691. String reason1=SettementUtil.RESON_FBFX1.replace("xxx",String.valueOf(settlement.getMoney()))
  692. +"<br>"+SettementUtil.RESON_JZFBFX.replace("xxx",amout[2])
  693. +"<br>"+SettementUtil.RESON_AZFBFX.replace("xxx",amout[3])
  694. +"<br>"+SettementUtil.RESON_GCJS4.replace("xxx",amout[0]);
  695. String reason2=SettementUtil.RESON_FBFX2.replace("xxx",amout[0])+"<br>"+SettementUtil.RESON_FBFX3.replace("xxx",amout[1]);
  696. String reason3=SettementUtil.RESON_FBFX1.replace("xxx",String.valueOf(settlement.getMoney()))+"<br>"+SettementUtil.RESON_FBFX2.replace("xxx",amout[0]);
  697. String reason4=SettementUtil.RESON_FBFX2.replace("xxx",amout[0])+"<br>"+SettementUtil.RESON_FBFX3.replace("xxx",amout[1]);
  698. String status =settlement.getStatus();
  699. if(status.equals("0")){
  700. reason=reason1+"<br>"+SettementUtil.RESON_TRUE+"<br>"+reason2+"<br>"+SettementUtil.RESON_TRUE;
  701. }
  702. if(status.equals("1")){
  703. double money = settlement.getMoney();
  704. double amout1 = Double.valueOf(amout[0]);
  705. double amout2 = Double.valueOf(amout[1]);
  706. if(money!=amout1&&amout1!=amout2){
  707. reason=reason1+"<br>"+SettementUtil.RESON_FLASE+"<br>"+reason2+"<br>"+SettementUtil.RESON_FLASE;
  708. }
  709. if(amout1!=amout2&&money==amout1){
  710. reason=reason1+"<br>"+SettementUtil.RESON_TRUE+"<br>"+reason2+"<br>"+SettementUtil.RESON_FLASE;
  711. }
  712. if (money!=amout1&&amout1==amout2){
  713. reason=reason1+"<br>"+SettementUtil.RESON_TRUE+"<br>"+reason2+"<br>"+SettementUtil.RESON_TRUE;
  714. }
  715. }
  716. return reason;
  717. }
  718. }