SettlementService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package com.jeeplus.modules.sg.overheadline.service;
  2. import com.jeeplus.common.utils.excel.ImportExcel;
  3. import com.jeeplus.common.utils.sg.ExcelUtil;
  4. import com.jeeplus.modules.sg.overheadline.entity.Settlement;
  5. import com.jeeplus.modules.sg.overheadline.mapper.SettlementMapper;
  6. import com.jeeplus.modules.sg.overheadline.util.BashInfo;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import org.springframework.web.multipart.MultipartFile;
  11. import java.util.*;
  12. @Service
  13. public class SettlementService {
  14. @Autowired
  15. private SettlementMapper settlementMapper;
  16. /*
  17. 添加结算工程表
  18. */
  19. @Transactional
  20. public void save(MultipartFile file,String id){
  21. try {
  22. List<Settlement> settlementList = getSettlement(file,id);
  23. for (Settlement settlement:settlementList){
  24. settlementMapper.sava(settlement);
  25. }
  26. }catch (Exception c){
  27. c.printStackTrace();
  28. }
  29. }
  30. /*
  31. 查找结算工程表
  32. */
  33. public List<Settlement> selectSettlementService(String id){
  34. return settlementMapper.selectSettlement(id);
  35. }
  36. /*
  37. 获取结算数据
  38. */
  39. public List<Settlement> getSettlement(MultipartFile file, String id) throws Exception{
  40. ImportExcel completion = new ImportExcel(file,1, BashInfo.SHEET_HZB);//工程项目竣工结算汇总表
  41. ImportExcel built = new ImportExcel(file,1,BashInfo.SHEET_GCHZ);//架空线路工程汇总表
  42. ImportExcel division = new ImportExcel(file,1,BashInfo.SHEET_FBFXJJ);//分部分项工程量清单计价表
  43. ImportExcel wordFirst = new ImportExcel(file,1,BashInfo.SHEET_CSB);//措施项目清单计价表(一)
  44. ImportExcel otherProject = new ImportExcel(file,1,BashInfo.SHEET_QTFY);//其他项目清单计价表
  45. ImportExcel feesProject = new ImportExcel(file,1,BashInfo.SHEET_GFQD);//规费项目清单计价表
  46. Map<String,Object[]> builtMap = getCompletionWorks(completion);
  47. double builtTotal = ExcelUtil.getDouble(built,BashInfo.QT_HJ,0,2);//获取架空线路工程费用汇总表 分部分项 合计
  48. double wordtotal = ExcelUtil.getDouble(wordFirst,BashInfo.QT_HJ,0,4);//获取措施费清单计价表
  49. double otherTotal = ExcelUtil.getDouble(otherProject,BashInfo.QT_HJ,0,2);//获取其他项目费合计
  50. int[] comlumn2 = {12,14,15};
  51. double[] divisiontotal=ExcelUtil.getDoubleArray(division,BashInfo.PROJECTNAME,2,comlumn2);//获取分工清单
  52. double feescount = ExcelUtil.getDouble(feesProject,BashInfo.QT_HJ,0,4);//获取规费合计
  53. return getTotality(builtMap,builtTotal,divisiontotal,wordtotal,otherTotal,feescount,id);
  54. }
  55. /*
  56. 获取《工程项目竣工结算汇总表》匹配数据
  57. */
  58. public Map<String,Object[]> getCompletionWorks(ImportExcel importExcel){
  59. Map<String,Object[]> map = new LinkedHashMap<String, Object[]>();
  60. int lastDataRowNum = importExcel.getLastDataRowNum();
  61. String key="";
  62. double val=0.0;
  63. String text = "";
  64. Object[] objects;
  65. for (int i = 2; i < lastDataRowNum; i++) {
  66. objects = new Object[2];
  67. key = importExcel.getValue(i+1,1);
  68. val = importExcel.getDouble(i+1,2);
  69. text=importExcel.getValue(i+1,3);
  70. switch (key){
  71. case BashInfo.JS_FBFX:
  72. val = importExcel.getDouble(i+1,2);
  73. text=importExcel.getValue(i+1,3);
  74. objects[0] = val;
  75. objects[1] = text;
  76. map.put(key, objects);
  77. break;
  78. case BashInfo.JS_CBRF:
  79. val = importExcel.getDouble(i+1,2);
  80. text=importExcel.getValue(i+1,3);
  81. objects[0] = val;
  82. objects[1] = text;
  83. map.put(key, objects);
  84. break;
  85. case BashInfo.JS_CSXM:
  86. val = importExcel.getDouble(i+1,2);
  87. text=importExcel.getValue(i+1,3);
  88. objects[0] = val;
  89. objects[1] = text;
  90. map.put(key, objects);
  91. break;
  92. case BashInfo.JS_QTXM:
  93. val = importExcel.getDouble(i+1,2);
  94. text=importExcel.getValue(i+1,3);
  95. objects[0] = val;
  96. objects[1] = text;
  97. map.put(key, objects);
  98. break;
  99. case BashInfo.JS_GF:
  100. val = importExcel.getDouble(i+1,2);
  101. text=importExcel.getValue(i+1,3);
  102. objects[0] = val;
  103. objects[1] = text;
  104. map.put(key, objects);
  105. break;
  106. case BashInfo.JS_SJ:
  107. val = importExcel.getDouble(i+1,2);
  108. text=importExcel.getValue(i+1,3);
  109. objects[0] = val;
  110. objects[1] = text;
  111. map.put(key, objects);
  112. break;
  113. case BashInfo.JS_FBRF:
  114. val = importExcel.getDouble(i+1,2);
  115. text=importExcel.getValue(i+1,3);
  116. objects[0] = val;
  117. objects[1] = text;
  118. map.put(key, objects);
  119. break;
  120. case BashInfo.JS_JGJS:
  121. val = importExcel.getDouble(i+1,2);
  122. text=importExcel.getValue(i+1,3);
  123. objects[0] = val;
  124. objects[1] = text;
  125. map.put(key, objects);
  126. break;
  127. case BashInfo.JS_BZZS:
  128. val = importExcel.getDouble(i+1,2);
  129. text=importExcel.getValue(i+1,3);
  130. objects[0] = val;
  131. objects[1] = text;
  132. map.put(key, objects);
  133. break;
  134. case BashInfo.JS_KJJG:
  135. val = importExcel.getDouble(i+1,2);
  136. text=importExcel.getValue(i+1,3);
  137. objects[0] = val;
  138. objects[1] = text;
  139. map.put(key, objects);
  140. break;
  141. case BashInfo.JS_GCJS:
  142. val = importExcel.getDouble(i+1,2);
  143. text=importExcel.getValue(i+1,3);
  144. objects[0] = val;
  145. objects[1] = text;
  146. map.put(key, objects);
  147. break;
  148. }
  149. }
  150. return map;
  151. }
  152. /*
  153. 结算汇总数据比对方法
  154. */
  155. public List<Settlement> getTotality(Map<String,Object[]> builtMap,double builtTotal,double[] divisiontotal,double wordtotal,double otherTotal,double feescount,String id){
  156. List<Settlement> list = new ArrayList<Settlement>();
  157. String key="";
  158. double count=0.0;
  159. double countProtect=0.0;
  160. double creatProtect=0.0;
  161. String status="1";
  162. Settlement settlement;
  163. String reason = BashInfo.JS_REASON;
  164. for (Map.Entry<String,Object[]> map:builtMap.entrySet()){
  165. key = map.getKey();
  166. Object[] val = map.getValue();
  167. double money = Double.parseDouble(val[0].toString());
  168. String remarks=val[1].toString();
  169. switch (key){
  170. case BashInfo.JS_FBFX:
  171. if(money==builtTotal&&money==divisiontotal[0]){
  172. status="0";
  173. }else {
  174. reason = BashInfo.RESON_FBFX;
  175. }
  176. count+=money;
  177. break;
  178. case BashInfo.JS_CBRF:
  179. if(money==divisiontotal[1]){
  180. status="0";
  181. }else {
  182. reason = BashInfo.RESON_CBRF;
  183. }
  184. count+=money;
  185. break;
  186. case BashInfo.JS_CSXM:
  187. if(money==wordtotal){
  188. status="0";
  189. }else {
  190. reason = BashInfo.RESON_CSXM;
  191. }
  192. count+=money;
  193. break;
  194. case BashInfo.JS_QTXM:
  195. if(money==otherTotal){
  196. status="0";
  197. }else {
  198. reason = BashInfo.RESON_QTXM;
  199. }
  200. count+=money;
  201. break;
  202. case BashInfo.JS_GF:
  203. if(money==feescount){
  204. status="0";
  205. }else {
  206. reason = BashInfo.RESON_GF;
  207. }
  208. count+=money;
  209. break;
  210. case BashInfo.JS_FBRF:
  211. if(money==divisiontotal[2]){
  212. status="0";
  213. }else {
  214. reason = BashInfo.RESON_FBRF;
  215. }
  216. count+=money;
  217. break;
  218. case BashInfo.JS_SJ:
  219. status="0";
  220. count+=money;
  221. break;
  222. case BashInfo.JS_JGJS:
  223. if(money==count){
  224. status="0";
  225. }else {
  226. reason = BashInfo.RESON_JGJS;
  227. }
  228. countProtect+=money;
  229. break;
  230. case BashInfo.JS_BZZS:
  231. status="0";
  232. countProtect+=money;
  233. break;
  234. case BashInfo.JS_KJJG:
  235. status="0";
  236. creatProtect=money;
  237. break;
  238. case BashInfo.GCJS:
  239. double reduce = countProtect-creatProtect;
  240. if (money==reduce){
  241. status="0";
  242. }else {
  243. reason = BashInfo.RESON_GCJS;
  244. }
  245. break;
  246. }
  247. settlement = new Settlement();
  248. settlement.setId(id);
  249. settlement.setEntryName(key);
  250. settlement.setMoney(money);
  251. settlement.setStatus(status);
  252. settlement.setRemarks(remarks);
  253. settlement.setReason(reason);
  254. list.add(settlement);
  255. status="1";
  256. reason = BashInfo.JS_REASON;
  257. }
  258. return list;
  259. }
  260. }