SettlementService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. package com.jeeplus.modules.sg.overheadline.service;
  2. import com.jeeplus.common.utils.excel.ImportExcel;
  3. import com.jeeplus.modules.sg.overheadline.entity.Settlement;
  4. import com.jeeplus.modules.sg.overheadline.mapper.SettlementMapper;
  5. import com.jeeplus.modules.sg.overheadline.util.BashInfo;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import java.util.*;
  11. @Service
  12. public class SettlementService {
  13. @Autowired
  14. private SettlementMapper settlementMapper;
  15. /*
  16. 添加结算工程表
  17. */
  18. @Transactional
  19. public void save(MultipartFile file,String id){
  20. try {
  21. List<Settlement> settlementList = getSettlement(file,id);
  22. for (int i = 0; i < settlementList.size(); i++) {
  23. settlementMapper.sava(settlementList.get(i));
  24. }
  25. }catch (Exception c){
  26. c.printStackTrace();
  27. }
  28. }
  29. /*
  30. 查找结算工程表
  31. */
  32. public List<Settlement> selectSettlementService(String id){
  33. return settlementMapper.selectSettlement(id);
  34. }
  35. /*
  36. 获取结算数据
  37. */
  38. public List<Settlement> getSettlement(MultipartFile file, String id) throws Exception{
  39. ImportExcel completion = new ImportExcel(file,1, BashInfo.SHEET_HZB);
  40. ImportExcel built = new ImportExcel(file,1,BashInfo.SHEET_GCHZ);
  41. ImportExcel division = new ImportExcel(file,1,BashInfo.SHEET_FBFXJJ);
  42. ImportExcel wordFirst = new ImportExcel(file,1,BashInfo.SHEET_CSB);
  43. ImportExcel otherProject = new ImportExcel(file,1,BashInfo.SHEET_QTFY);
  44. ImportExcel feesProject = new ImportExcel(file,1,BashInfo.SHEET_GFQD);
  45. Map<String,Object[]> builtMap = getCompletionWorks(completion);
  46. Double builtTotal = getBuiltStilts(built);
  47. Double[] divisiontotal = getDivisionOf(division);
  48. Double wordtotal = getWording(wordFirst);
  49. Double otherTotal = getOtherProject(otherProject);
  50. Double feescount = getFeesTotal(feesProject);
  51. return getTotality(builtMap,builtTotal,divisiontotal,wordtotal,otherTotal,feescount,id);
  52. }
  53. /*
  54. 获取工程竣工数据
  55. */
  56. public Map<String,Object[]> getCompletionWorks(ImportExcel importExcel){
  57. Map<String,Object[]> map = new LinkedHashMap<String, Object[]>();
  58. Integer lastDataRowNum = importExcel.getLastDataRowNum();
  59. String key="";
  60. Double val=0.0;
  61. String text = "";
  62. Object[] objects;
  63. for (int i = 2; i < lastDataRowNum; i++) {
  64. objects = new Object[2];
  65. key = importExcel.getValue(i+1,1);
  66. // val = importExcel.getDouble(i+1,2);
  67. // text=importExcel.getValue(i+1,3);
  68. switch (key){
  69. case BashInfo.JS_FBFX:
  70. val = importExcel.getDouble(i+1,2);
  71. text=importExcel.getValue(i+1,3);
  72. objects[0] = val;
  73. objects[1] = text;
  74. map.put(key, objects);
  75. break;
  76. case BashInfo.JS_CBRF:
  77. val = importExcel.getDouble(i+1,2);
  78. text=importExcel.getValue(i+1,3);
  79. objects[0] = val;
  80. objects[1] = text;
  81. map.put(key, objects);
  82. break;
  83. case BashInfo.JS_CSXM:
  84. val = importExcel.getDouble(i+1,2);
  85. text=importExcel.getValue(i+1,3);
  86. objects[0] = val;
  87. objects[1] = text;
  88. map.put(key, objects);
  89. break;
  90. case BashInfo.JS_QTXM:
  91. val = importExcel.getDouble(i+1,2);
  92. text=importExcel.getValue(i+1,3);
  93. objects[0] = val;
  94. objects[1] = text;
  95. map.put(key, objects);
  96. break;
  97. case BashInfo.JS_GF:
  98. val = importExcel.getDouble(i+1,2);
  99. text=importExcel.getValue(i+1,3);
  100. objects[0] = val;
  101. objects[1] = text;
  102. map.put(key, objects);
  103. break;
  104. case BashInfo.JS_SJ:
  105. val = importExcel.getDouble(i+1,2);
  106. text=importExcel.getValue(i+1,3);
  107. objects[0] = val;
  108. objects[1] = text;
  109. map.put(key, objects);
  110. break;
  111. case BashInfo.JS_FBRF:
  112. val = importExcel.getDouble(i+1,2);
  113. text=importExcel.getValue(i+1,3);
  114. objects[0] = val;
  115. objects[1] = text;
  116. map.put(key, objects);
  117. break;
  118. case BashInfo.JS_JGJS:
  119. val = importExcel.getDouble(i+1,2);
  120. text=importExcel.getValue(i+1,3);
  121. objects[0] = val;
  122. objects[1] = text;
  123. map.put(key, objects);
  124. break;
  125. case BashInfo.JS_BZZS:
  126. val = importExcel.getDouble(i+1,2);
  127. text=importExcel.getValue(i+1,3);
  128. objects[0] = val;
  129. objects[1] = text;
  130. map.put(key, objects);
  131. break;
  132. case BashInfo.JS_KJJG:
  133. val = importExcel.getDouble(i+1,2);
  134. text=importExcel.getValue(i+1,3);
  135. objects[0] = val;
  136. objects[1] = text;
  137. map.put(key, objects);
  138. break;
  139. case BashInfo.JS_GCJS:
  140. val = importExcel.getDouble(i+1,2);
  141. text=importExcel.getValue(i+1,3);
  142. objects[0] = val;
  143. objects[1] = text;
  144. map.put(key, objects);
  145. break;
  146. }
  147. }
  148. return map;
  149. }
  150. /*
  151. 获取架空合计
  152. */
  153. public Double getBuiltStilts(ImportExcel importExcel){
  154. Double value = 0.0;
  155. String type="";
  156. Integer lastDataRowNum = importExcel.getLastDataRowNum();
  157. for (int i = 2; i < lastDataRowNum ; i++) {
  158. type = importExcel.getValue(i+1,0);
  159. if (type.equals(BashInfo.QT_HJ)){
  160. value = importExcel.getDouble(i+1,2);
  161. break;
  162. }
  163. }
  164. return value;
  165. }
  166. /*
  167. 获取措施费合计
  168. */
  169. public Double getWording(ImportExcel importExcel){
  170. Double value = 0.0;
  171. String type = "";
  172. Integer lastDataRowNum = importExcel.getLastDataRowNum();
  173. for (int i = 2; i <lastDataRowNum ; i++) {
  174. type = importExcel.getValue(i+1,0);
  175. if (type.equals(BashInfo.QT_HJ)){
  176. value = importExcel.getDouble(i+1,4);
  177. break;
  178. }
  179. }
  180. return value;
  181. }
  182. /*
  183. 获取其他项目费
  184. */
  185. public Double getOtherProject(ImportExcel importExcel){
  186. Double value = 0.0;
  187. String type= "";
  188. Integer lastDataRowNum = importExcel.getLastDataRowNum();
  189. for (int i = 0; i <lastDataRowNum ; i++) {
  190. type = importExcel.getValue(i+1,0);
  191. if (type.equals(BashInfo.QT_HJ)){
  192. value = importExcel.getDouble(i+1,2);
  193. break;
  194. }
  195. }
  196. return value;
  197. }
  198. /*
  199. 获取规费合计
  200. */
  201. public Double getFeesTotal(ImportExcel importExcel){
  202. Double value = 0.0;
  203. String type = "";
  204. Integer lastDataRowNum = importExcel.getLastDataRowNum();
  205. for (int i = 2; i < lastDataRowNum; i++) {
  206. type = importExcel.getValue(i+1,0);
  207. if (type.equals(BashInfo.QT_HJ)){
  208. value = importExcel.getDouble(i+1,4);
  209. break;
  210. }
  211. }
  212. return value;
  213. }
  214. /*
  215. 获取分工清单
  216. */
  217. public Double[] getDivisionOf(ImportExcel importExcel){
  218. Double count = 0.0;
  219. Double fpermoney = 0.0;
  220. Double cpermoney = 0.0;
  221. String type="";
  222. Integer lastDataRowNum = importExcel.getLastDataRowNum();
  223. for (int i = 0; i < lastDataRowNum; i++) {
  224. type = importExcel.getValue(i+1,2);
  225. if (type.equals(BashInfo.PROJECTNAME)) {
  226. count = importExcel.getDouble(i + 1, 12);
  227. cpermoney = importExcel.getDouble(i + 1, 14);
  228. fpermoney = importExcel.getDouble(i + 1, 15);
  229. break;
  230. }
  231. }
  232. Double[] val = new Double[3];
  233. val[0] = count;
  234. val[1] = cpermoney;
  235. val[2] = fpermoney;
  236. return val;
  237. }
  238. /*
  239. 结算汇总
  240. */
  241. public List<Settlement> getTotality(Map<String,Object[]> builtMap,Double builtTotal,Double[] divisiontotal,Double wordtotal,Double otherTotal,Double feescount,String id){
  242. List<Settlement> list = new ArrayList<Settlement>();
  243. String key="";
  244. double count=0.0;
  245. double countProtect=0.0;
  246. double creatProtect=0.0;
  247. String status="1";
  248. Settlement settlement;
  249. String reason = BashInfo.JS_REASON;
  250. for (Map.Entry<String,Object[]> map:builtMap.entrySet()){
  251. key = map.getKey();
  252. Object[] val = map.getValue();
  253. double money = Double.parseDouble(val[0].toString());
  254. String remarks=val[1].toString();
  255. switch (key){
  256. case BashInfo.JS_FBFX:
  257. if(money==builtTotal&&money==divisiontotal[0]){
  258. status="0";
  259. }else {
  260. reason = BashInfo.RESON_FBFX;
  261. }
  262. count+=money;
  263. break;
  264. case BashInfo.JS_CBRF:
  265. if(money==divisiontotal[1]){
  266. status="0";
  267. }else {
  268. reason = BashInfo.RESON_CBRF;
  269. }
  270. count+=money;
  271. break;
  272. case BashInfo.JS_CSXM:
  273. if(money==wordtotal){
  274. status="0";
  275. }else {
  276. reason = BashInfo.RESON_CSXM;
  277. }
  278. count+=money;
  279. break;
  280. case BashInfo.JS_QTXM:
  281. if(money==otherTotal){
  282. status="0";
  283. }else {
  284. reason = BashInfo.RESON_QTXM;
  285. }
  286. count+=money;
  287. break;
  288. case BashInfo.JS_GF:
  289. if(money==feescount){
  290. status="0";
  291. }else {
  292. reason = BashInfo.RESON_GF;
  293. }
  294. count+=money;
  295. break;
  296. case BashInfo.JS_FBRF:
  297. if(money==divisiontotal[2]){
  298. status="0";
  299. }else {
  300. reason = BashInfo.RESON_FBRF;
  301. }
  302. count+=money;
  303. break;
  304. case BashInfo.JS_SJ:
  305. status="0";
  306. count+=money;
  307. break;
  308. case BashInfo.JS_JGJS:
  309. if(money==count){
  310. status="0";
  311. }else {
  312. reason = BashInfo.RESON_JGJS;
  313. }
  314. countProtect+=money;
  315. break;
  316. case BashInfo.JS_BZZS:
  317. status="0";
  318. countProtect+=money;
  319. break;
  320. case BashInfo.JS_KJJG:
  321. status="0";
  322. creatProtect=money;
  323. break;
  324. case BashInfo.GCJS:
  325. double reduce = countProtect-creatProtect;
  326. if (money==reduce){
  327. status="0";
  328. }else {
  329. reason = BashInfo.JS_REASON;
  330. }
  331. break;
  332. }
  333. settlement = new Settlement();
  334. settlement.setId(id);
  335. settlement.setEntryName(key);
  336. settlement.setMoney(money);
  337. settlement.setStatus(status);
  338. settlement.setRemarks(remarks);
  339. settlement.setReason(reason);
  340. list.add(settlement);
  341. status="1";
  342. reason = BashInfo.JS_REASON;
  343. }
  344. return list;
  345. }
  346. }