OverheadLineService.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  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.JkxlAdjustFee;
  5. import com.jeeplus.modules.sg.overheadline.entity.JkxlDetailFee;
  6. import com.jeeplus.modules.sg.overheadline.entity.Settlement;
  7. import com.jeeplus.modules.sg.overheadline.entity.WbsProject;
  8. import com.jeeplus.modules.sg.overheadline.mapper.OverheadLineMapper;
  9. import com.jeeplus.modules.sg.overheadline.util.BashInfo;
  10. import com.jeeplus.modules.sg.overheadline.util.SettementUtil;
  11. import com.jeeplus.modules.sg.project.entity.WbsItem;
  12. import com.jeeplus.modules.sg.project.service.ItemService;
  13. import org.apache.commons.lang3.ArrayUtils;
  14. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import java.io.IOException;
  20. import java.math.BigDecimal;
  21. import java.text.SimpleDateFormat;
  22. import java.util.*;
  23. @Service
  24. public class OverheadLineService {
  25. @Autowired
  26. private OverheadLineMapper overheadLineMapper;
  27. @Autowired
  28. private FeeAdjustService feeAdjustService;
  29. @Autowired
  30. private RuleRatioService ruleRatioService;
  31. @Autowired
  32. private SettlementService settlementService;
  33. @Autowired
  34. private ItemService itemService;
  35. public List<JkxlDetailFee> getList(String id,String type){
  36. return overheadLineMapper.getList(id,type);
  37. }
  38. public List<JkxlDetailFee> findList(String id,String type){
  39. List<JkxlDetailFee> list = overheadLineMapper.findList(id,type);
  40. JkxlAdjustFee jkxlAdjustFee = new JkxlAdjustFee();
  41. jkxlAdjustFee.setId(id);
  42. jkxlAdjustFee.setType(BashInfo.CE);
  43. List<JkxlAdjustFee> jkxlAdjustFees = feeAdjustService.getTzFee(jkxlAdjustFee);
  44. JkxlAdjustFee jkxlAdjustFee1 = jkxlAdjustFees.get(0);
  45. double cFee = jkxlAdjustFee1.getFee();
  46. double btTotal = 0.00;
  47. double qtTotal = 0.00;
  48. double azTotal = 0.00;
  49. double otherTotal = 0.00;
  50. for(JkxlDetailFee jkxlDetailFee : list){
  51. double measuresFee1 = jkxlDetailFee.getMeasuresFee1()!=null? jkxlDetailFee.getMeasuresFee1():0.00;
  52. double measuresFee2 = jkxlDetailFee.getMeasuresFee2()!=null? jkxlDetailFee.getMeasuresFee2():0.00;
  53. double measuresFee3 = jkxlDetailFee.getMeasuresFee3()!=null? jkxlDetailFee.getMeasuresFee3():0.00;
  54. double Tex = jkxlDetailFee.getTex()!=null? jkxlDetailFee.getTex():0.00;
  55. double otherCost = jkxlDetailFee.getOtherCost()!=null? jkxlDetailFee.getOtherCost():0.00;
  56. double Fees = jkxlDetailFee.getFees()!=null? jkxlDetailFee.getFees():0.00;
  57. double qtFee = measuresFee1 + measuresFee2 + measuresFee3 + otherCost + Fees + Tex;
  58. double rgFee = jkxlDetailFee.getRgCost()!=null? jkxlDetailFee.getRgCost():0.00;
  59. double cbrFee = jkxlDetailFee.getCbrCost()!=null? jkxlDetailFee.getCbrCost():0.00;
  60. double fbrFee = jkxlDetailFee.getFbrCost()!=null? jkxlDetailFee.getFbrCost():0.00;
  61. double jxFee = jkxlDetailFee.getJxCost()!=null? jkxlDetailFee.getJxCost():0.00;
  62. double azFee = rgFee + cbrFee + jxFee;
  63. jkxlDetailFee.setQtFee(qtFee);
  64. jkxlDetailFee.setAzFee(azFee);
  65. }
  66. for(JkxlDetailFee jkxlDetailFee : list){
  67. //本体费用求和
  68. if(jkxlDetailFee.getOriginalTotalCost() != null){
  69. btTotal += jkxlDetailFee.getTotalFee();
  70. azTotal += jkxlDetailFee.getAzFee();
  71. otherTotal += jkxlDetailFee.getQtFee();
  72. }
  73. //其他费用求和
  74. if(jkxlDetailFee.getOriginalTotalCost() == null && jkxlDetailFee.getTotalFee() != null){
  75. qtTotal += jkxlDetailFee.getTotalFee();
  76. }
  77. }
  78. for(JkxlDetailFee jkxlDetailFee : list){
  79. if(jkxlDetailFee.getWbsCode().equals("30000000")){
  80. jkxlDetailFee.setTotalFee(btTotal+qtTotal);
  81. jkxlDetailFee.setAzFee(azTotal);
  82. jkxlDetailFee.setQtFee(otherTotal);
  83. jkxlDetailFee.setcFee(cFee);
  84. jkxlDetailFee.setJsFee(btTotal+qtTotal+cFee);
  85. }
  86. if(jkxlDetailFee.getWbsCode().equals("39000000")){
  87. jkxlDetailFee.setTotalFee(btTotal);
  88. jkxlDetailFee.setAzFee(azTotal);
  89. jkxlDetailFee.setQtFee(otherTotal);
  90. }
  91. if(jkxlDetailFee.getWbsCode().equals("34000000")){
  92. jkxlDetailFee.setTotalFee(qtTotal);
  93. }
  94. }
  95. for (int i=0;i<list.size();i++){
  96. list.get(i).setIndex(i+1);
  97. }
  98. return list;
  99. }
  100. public JkxlDetailFee getDate(String id, String wbsCode){
  101. return overheadLineMapper.getData(id,wbsCode);
  102. }
  103. @Transactional(readOnly = false)
  104. public void updataDate(JkxlDetailFee jkxlDetailFee){
  105. overheadLineMapper.updateDate(jkxlDetailFee);
  106. }
  107. @Transactional(readOnly = false)
  108. public void saveProject(WbsProject wbsProject){
  109. overheadLineMapper.saveProject(wbsProject);
  110. }
  111. //架空线路保存数据
  112. @Transactional(readOnly = false)
  113. public void saveJk(MultipartFile file,String name,String id,String projectId,String type) throws IOException, InvalidFormatException {
  114. WbsItem wbsItem = itemService.get(id);
  115. if(wbsItem == null){
  116. WbsItem wbsItem1 = new WbsItem();
  117. wbsItem1.setProjectId(projectId);
  118. wbsItem1.setId(id);
  119. wbsItem1.setItemName(name);
  120. wbsItem1.setType(type);
  121. //保存项目
  122. itemService.save(wbsItem1);
  123. }
  124. List<JkxlDetailFee> jkxlDetailFees = overheadLineMapper.findList(id,type);
  125. if(jkxlDetailFees != null && jkxlDetailFees.size()>0){
  126. overheadLineMapper.delete(id);
  127. feeAdjustService.delete(id);
  128. settlementService.delete(id);
  129. }
  130. //获取调差系数
  131. double[] tcRate = new double[3];
  132. tcRate[0] = ruleRatioService.getValueByName(BashInfo.RATIO_RGTC).getValue()/100;
  133. tcRate[1] = ruleRatioService.getValueByName(BashInfo.RATIO_CLTC).getValue()/100;
  134. tcRate[2] = ruleRatioService.getValueByName(BashInfo.RATIO_JXTC).getValue()/100;
  135. //读取表格
  136. ImportExcel importExcel = new ImportExcel(file,1,BashInfo.SHEET_FBFXJJ); //分部分项工程量清单计价表
  137. ImportExcel csqd = new ImportExcel(file,1,BashInfo.SHEET_CSB); // 措施项目清单计价表(一)
  138. ImportExcel gf = new ImportExcel(file,1,BashInfo.SHEET_GFQD); //规费项目清单计价表
  139. ImportExcel qt = new ImportExcel(file,1,BashInfo.SHEET_QTFY); //其他项目清单计价表
  140. ImportExcel total = new ImportExcel(file,1,BashInfo.SHEET_HZB ); //工程项目竣工结算汇总表
  141. ImportExcel gzhz = new ImportExcel(file,1,BashInfo.SHEET_GCHZ ); //架空线路工程费用汇总
  142. ImportExcel fbrcg = new ImportExcel(file,1,BashInfo.SHEET_FBRCG); //发包人采购材料设备计价表
  143. ImportExcel cbrcgsb = new ImportExcel(file,1,BashInfo.SHEET_FBRCG); //发包人采购设备计价表
  144. //数据核验数据
  145. List<Settlement> settlementList = SettementUtil.getComparison(total);
  146. double builtTotal = ExcelUtil.getDouble(gzhz,BashInfo.QT_HJ,0,2);//获取架空线路工程费用汇总表 分部分项 合计
  147. double wordtotal1 = ExcelUtil.getDouble(csqd,BashInfo.QT_HJ,0,4);//获取措施费清单计价表
  148. double otherTotal = ExcelUtil.getDouble(qt,BashInfo.QT_HJ,0,2);//获取其他项目费合计
  149. double cbperson = ExcelUtil.getDouble(cbrcgsb,BashInfo.SHEET_CBRCG,0,2);//获取其他项目费合计
  150. int[] comlumn2 = {12,15};//定义所要数组
  151. double[] divisiontotal=ExcelUtil.getDoubleArray(importExcel,BashInfo.PROJECTNAME,2,comlumn2);//获取分部分项比对数据清单
  152. double feescount = ExcelUtil.getDouble(gf,BashInfo.QT_HJ,0,4);//获取规费合计
  153. //数据核验并保存数据库
  154. double wordtotal2 = 0.0;
  155. List<Settlement> settlements=SettementUtil.getComparison(settlementList,builtTotal,divisiontotal,wordtotal1,wordtotal2,otherTotal,feescount,cbperson);
  156. settlementService.save(settlements,id);
  157. //获取补增值税税率调整差额和扣减甲供材超供材料费
  158. double[] wsbFees = ExcelUtil.getDoubleArray(total, new String[]{BashInfo.BZZSSL,BashInfo.KJJGCC},1,2);
  159. double csFee = ExcelUtil.getDouble(gzhz,BashInfo.HZ_CH,1,2);
  160. double[] originalTotalFees = ExcelUtil.getDoubleArray(gzhz,BashInfo.HZ_ALL,1,2); //获取合计费
  161. double[] zjgcFees = ExcelUtil.getDoubleArray(gzhz,BashInfo.HZ_ALL,1,3); //获取直接工程费
  162. double[][] originalFees = ExcelUtil.getDoubleArrays(importExcel,BashInfo.MX_ALL,2, new int[]{13, 14, 15, 17}); //获取原始费用
  163. double texRate = ExcelUtil.getTexRate(total); //获取税率
  164. double totalFee = ExcelUtil.getDouble(importExcel,BashInfo.PROJECTNAME,2,12); //获取架空线路合计金额
  165. double[] csRate = BashInfo.getCsRate(csqd); //获取措施费率
  166. double[] gfRate = BashInfo.getGfRate(gf); //获取规费率
  167. double[] qtFees = BashInfo.getQtFees(qt); //获取其他费用
  168. double gcjsFee = BashInfo.getGcjsFee(total); //获取工程结算价
  169. double fbrFee = ExcelUtil.getDouble(fbrcg,BashInfo.QT_HJ,0,6); //发包人采购计价表合计金额
  170. double zjgcTotal = ExcelUtil.getDouble(gzhz,BashInfo.QT_HJ,0,3);//直接工程费合计
  171. double[] aqwmFees = ExcelUtil.getDoubleArray(csqd,BashInfo.CS_AQWM,1, new int[]{3, 4}); //安全文明施工费
  172. double zg = zjgcTotal-(aqwmFees[1]/(aqwmFees[0]/100));
  173. double jxsl = new BigDecimal(zg/(fbrFee-zg)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); //进项税率
  174. //将本体工程费用明细存入集合
  175. List<JkxlDetailFee> list = new ArrayList<>();
  176. for(int i=0;i<originalTotalFees.length;i++){
  177. JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
  178. double originalTotalCost = originalTotalFees[i]; //原合计
  179. double otherRate = originalTotalCost/totalFee; //其他费用分摊比例
  180. double orRate = new BigDecimal(otherRate).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); //四舍五入
  181. double otherFee = qtFees[2]*otherRate; //其他费用
  182. double zjgcFee = zjgcFees[i];//直接工程费
  183. double originalRgCost = originalFees[i][0];// 原人工费
  184. double rgCost = originalRgCost/(1+tcRate[0]); //后人工费
  185. double originalCbrCost = originalFees[i][1]; //原承包人采购
  186. double cbrCost = originalCbrCost/(1+tcRate[1]); //后承包人采购
  187. double originalFbrCost = originalFees[i][2]; //原发包人采购
  188. double fbrCost = originalFbrCost/(1+jxsl); //后发包人采购
  189. double originalJxrCost = originalFees[i][3]; //原机械费
  190. double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
  191. double measuresFee1 = (zjgcFee-fbrCost*jxsl)*csRate[0]; //措施费一(2)
  192. double measuresFee2 = rgCost*csRate[1]; //措施费一(1)
  193. double measuresFee3 = 0.00; //措施费二
  194. double fees = rgCost*gfRate[1]*1.12+rgCost*gfRate[0]; //规费
  195. double tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee-originalFbrCost)*texRate; //税金
  196. double totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax-originalFbrCost; //合计
  197. jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
  198. jkxlDetailFee.setOriginalRate(orRate);
  199. jkxlDetailFee.setOriginalRgCost(originalRgCost);
  200. jkxlDetailFee.setRgCost(rgCost);
  201. jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
  202. jkxlDetailFee.setCbrCost(cbrCost);
  203. jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
  204. jkxlDetailFee.setFbrCost(fbrCost);
  205. jkxlDetailFee.setOriginalJxCost(originalJxrCost);
  206. jkxlDetailFee.setJxCost(jxCost);
  207. jkxlDetailFee.setMeasuresFee1(measuresFee1);
  208. jkxlDetailFee.setMeasuresFee2(measuresFee2);
  209. jkxlDetailFee.setMeasuresFee3(measuresFee3);
  210. jkxlDetailFee.setFees(fees);
  211. jkxlDetailFee.setOtherCost(otherFee);
  212. jkxlDetailFee.setTex(tax);
  213. jkxlDetailFee.setTotalFee(totalfee);
  214. jkxlDetailFee.setZjgcFee(zjgcFee);
  215. jkxlDetailFee.setWbsCode(BashInfo.WBSIDS[i]);
  216. jkxlDetailFee.setId(id);
  217. list.add(jkxlDetailFee);
  218. }
  219. double tz = 0.00; //总合计金额
  220. for(JkxlDetailFee jkxlDetailFee : list){
  221. tz += jkxlDetailFee.getTotalFee();
  222. }
  223. double gxFee = Math.abs(gcjsFee-tz-qtFees[0]-qtFees[1]-wsbFees[0]-wsbFees[1]);
  224. //将其他费用存入集合
  225. JkxlDetailFee jkxlDetailFee1 = new JkxlDetailFee();
  226. JkxlDetailFee jkxlDetailFee2 = new JkxlDetailFee();
  227. jkxlDetailFee1.setId(id);
  228. jkxlDetailFee1.setWbsCode("34120000");
  229. jkxlDetailFee1.setTotalFee(qtFees[0]);
  230. jkxlDetailFee2.setWbsCode("34220000");
  231. jkxlDetailFee2.setTotalFee(qtFees[1]);
  232. jkxlDetailFee2.setId(id);
  233. list.add(jkxlDetailFee1);
  234. list.add(jkxlDetailFee2);
  235. //保存费用明细
  236. for(JkxlDetailFee jkxlDetailFee:list){
  237. overheadLineMapper.save(jkxlDetailFee);
  238. }
  239. //保存未识别费用
  240. JkxlAdjustFee jkxlAdjustFee = new JkxlAdjustFee();
  241. jkxlAdjustFee.setId(id);
  242. jkxlAdjustFee.setType(BashInfo.BZZSSL);
  243. jkxlAdjustFee.setFee(wsbFees[0]);
  244. feeAdjustService.save(jkxlAdjustFee);
  245. JkxlAdjustFee jkxlAdjustFee1 = new JkxlAdjustFee();
  246. jkxlAdjustFee1.setId(id);
  247. jkxlAdjustFee1.setType(BashInfo.KJJGCC);
  248. jkxlAdjustFee1.setFee(wsbFees[1]);
  249. feeAdjustService.save(jkxlAdjustFee1);
  250. JkxlAdjustFee jkxlAdjustFee2 = new JkxlAdjustFee();
  251. jkxlAdjustFee2.setId(id);
  252. jkxlAdjustFee2.setType(BashInfo.CE);
  253. jkxlAdjustFee2.setFee(gxFee);
  254. feeAdjustService.save(jkxlAdjustFee2);
  255. if(csFee!= 0.00){
  256. JkxlAdjustFee jkxlAdjustFee3 = new JkxlAdjustFee();
  257. jkxlAdjustFee3.setId(id);
  258. jkxlAdjustFee3.setType(BashInfo.HZ_CH);
  259. jkxlAdjustFee3.setFee(csFee);
  260. feeAdjustService.save(jkxlAdjustFee3);
  261. }
  262. }
  263. //电缆线路保存数据
  264. @Transactional(readOnly = false)
  265. public void saveDl(MultipartFile file,String name,String id,String projectId,String type) throws IOException, InvalidFormatException {
  266. WbsItem wbsItem = itemService.get(id);
  267. if(wbsItem == null){
  268. WbsItem wbsItem1 = new WbsItem();
  269. wbsItem1.setProjectId(projectId);
  270. wbsItem1.setId(id);
  271. wbsItem1.setItemName(name);
  272. wbsItem1.setType(type);
  273. //保存项目
  274. itemService.save(wbsItem1);
  275. }
  276. List<JkxlDetailFee> jkxlDetailFees = overheadLineMapper.findList(id,type);
  277. if(jkxlDetailFees != null && jkxlDetailFees.size()>0){
  278. overheadLineMapper.delete(id);
  279. feeAdjustService.delete(id);
  280. settlementService.delete(id);
  281. }
  282. //获取调差系数
  283. double[] tcRate = new double[3];
  284. tcRate[0] = ruleRatioService.getValueByName(BashInfo.RATIO_RGTC).getValue()/100;
  285. tcRate[1] = ruleRatioService.getValueByName(BashInfo.RATIO_CLTC).getValue()/100;
  286. tcRate[2] = ruleRatioService.getValueByName(BashInfo.RATIO_JXTC).getValue()/100;
  287. //读取表格
  288. ImportExcel jzqd = new ImportExcel(file,1,BashInfo.SHEET_JZFBFXJJ); //建筑分部分项工程量清单计价表
  289. ImportExcel azqd = new ImportExcel(file,1,BashInfo.SHEET_AZFBFXJJ); //安装分部分项工程量清单计价表
  290. ImportExcel csqd = new ImportExcel(file,1,BashInfo.SHEET_CSB); // 措施项目清单计价表(一)
  291. ImportExcel gf = new ImportExcel(file,1,BashInfo.SHEET_GFQD); //规费项目清单计价表
  292. ImportExcel qt = new ImportExcel(file,1,BashInfo.SHEET_QTFY); //其他项目清单计价表
  293. ImportExcel total = new ImportExcel(file,1,BashInfo.SHEET_HZB ); //工程项目竣工结算汇总表
  294. ImportExcel jzhz = new ImportExcel(file,1,BashInfo.SHEET_JZHZB ); //电缆线路建筑工程费用汇总表
  295. ImportExcel azhz = new ImportExcel(file,1,BashInfo.SHEET_HZHZB ); //电缆线路安装工程费用汇总表
  296. ImportExcel fbrcg = new ImportExcel(file,1,BashInfo.SHEET_FBRCG); //发包人采购材料设备计价表
  297. // ImportExcel cbrcgsb = new ImportExcel(file,1,BashInfo.SHEET_FBRCG); //发包人采购设备计价表
  298. //数据核验数据
  299. // Map<String,Object[]> builtMap = BashInfo.getCompletionWorks(total);//获取工程项目竣工所有数据
  300. // double builtTotal = ExcelUtil.getDouble(gzhz,BashInfo.QT_HJ,0,2);//获取架空线路工程费用汇总表 分部分项 合计
  301. // double wordtotal = ExcelUtil.getDouble(csqd,BashInfo.QT_HJ,0,4);//获取措施费清单计价表
  302. // double otherTotal = ExcelUtil.getDouble(qt,BashInfo.QT_HJ,0,2);//获取其他项目费合计
  303. // double cbperson = ExcelUtil.getDouble(cbrcgsb,BashInfo.SHEET_CBRCG,0,2);//获取其他项目费合计
  304. // int[] comlumn2 = {12,14,15};//定义所要数组
  305. // double[] divisiontotal=ExcelUtil.getDoubleArray(importExcel,BashInfo.PROJECTNAME,2,comlumn2);//获取分部分项比对数据清单
  306. // double feescount = ExcelUtil.getDouble(gf,BashInfo.QT_HJ,0,4);//获取规费合计
  307. //数据核验并保存数据库
  308. // settlementService.save(builtMap,builtTotal,divisiontotal,wordtotal,otherTotal,feescount,cbperson,id);
  309. //获取补增值税税率调整差额和扣减甲供材超供材料费
  310. double wsbFees = ExcelUtil.getDouble(total, BashInfo.KJYJSG,1,2);
  311. // double csFee = ExcelUtil.getDouble(gzhz,BashInfo.HZ_CH,1,2); //措施项目费
  312. double[] originalTotalJzFees = ExcelUtil.getDoubleArray(jzhz,BashInfo.HZ_JZ,1,2); //获取建筑合计费
  313. double[] originalTotalAzFees = ExcelUtil.getDoubleArray(azhz,BashInfo.HZ_AZ,1,2); //获取安装合计费
  314. double[] zjgcJzFees = ExcelUtil.getDoubleArray(jzhz,BashInfo.HZ_JZ,1,3); //获取建筑直接工程费
  315. double[][] zjgcAzFees = ExcelUtil.getDoubleArrays(azhz,BashInfo.HZ_AZ,1,new int[]{3,4}); //获取安装直接工程费和人工费
  316. double[][] originalJzFees = ExcelUtil.getDoubleArrays(jzqd,BashInfo.MX_JZ,2, new int[]{13, 14, 15, 17}); //获取建筑原始费用
  317. double[][] originalAzFees = ExcelUtil.getDoubleArrays(azqd,BashInfo.MX_AZ,2, new int[]{13, 14, 15, 17}); //获取安装原始费用
  318. double texRate = ExcelUtil.getTexRate(total); //获取税率
  319. double fbfxFee = ExcelUtil.getDouble(total,BashInfo.JS_FBFX,1,2); //分部分项工程费
  320. double totalJzFee = ExcelUtil.getDouble(jzqd,BashInfo.DLJZ,2,12); //获取电缆建筑合计金额
  321. double totalAzFee = ExcelUtil.getDouble(jzqd,BashInfo.DLAZ,2,12); //获取电缆安装合计金额
  322. // double totalFee = totalJzFee + totalAzFee;
  323. double jzcsRate = BashInfo.getJzRate(csqd); //获取建筑措施费率
  324. double[] azcsRate = BashInfo.getAzRate(csqd); //获取安装措施费率
  325. double[] jzgfRate = BashInfo.getJzGfRate(gf); //获取建筑规费率
  326. double[] azgfRate = BashInfo.getAzGfRate(gf); //获取安装规费率
  327. double[] qtFees = BashInfo.getQtFees(qt); //获取其他费用
  328. double gcjsFee = BashInfo.getGcjsFee(total); //获取工程结算价
  329. double fbrJzFee = ExcelUtil.getDouble(fbrcg,BashInfo.QT_XJ,0,6); //建筑发包人采购计价表合计金额
  330. double fbrAzFee = BashInfo.getFbrAzFee(fbrcg); //安装发包人采购计价表合计金额
  331. double zjgcJzTotal = ExcelUtil.getDouble(jzhz,BashInfo.QT_HJ,0,3);//建筑直接工程费合计
  332. double zjgcAzTotal = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,3);//安装直接工程费合计
  333. double[] aqwmJzFees = ExcelUtil.getDoubleArray(csqd,BashInfo.CS_AQWM,1, new int[]{3, 4}); //建筑安全文明施工费
  334. double[] aqwmAzFees = BashInfo.getAqwfAzFee(csqd); //建筑安全文明施工费
  335. double zgJz = zjgcJzTotal-(aqwmJzFees[1]/(aqwmJzFees[0]/100));
  336. double zgAz = zjgcAzTotal-(aqwmAzFees[1]/(aqwmAzFees[0]/100));
  337. double jxslJz = new BigDecimal(zgJz/(fbrJzFee-zgJz)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); //建筑进项税率
  338. double jxslAz = new BigDecimal(zgAz/(fbrAzFee-zgAz)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); //安装进项税率
  339. //将本体工程费用明细存入集合
  340. List<JkxlDetailFee> list = new ArrayList<>();
  341. for(int i=0;i<originalTotalJzFees.length;i++){
  342. JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
  343. double originalTotalCost = originalTotalJzFees[i]; //原合计
  344. // double otherRate = originalTotalCost/totalFee; //其他费用分摊比例
  345. // double orRate = new BigDecimal(otherRate).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); //四舍五入
  346. double otherFee = qtFees[2]/fbfxFee*originalTotalCost; //其他费用
  347. double zjgcJzFee = zjgcJzFees[i];//直接工程费
  348. double originalRgCost = originalJzFees[i][0];// 原人工费
  349. double rgCost = originalRgCost/(1+tcRate[0]); //后人工费
  350. double originalCbrCost = originalJzFees[i][1]; //原承包人采购
  351. double cbrCost = originalCbrCost/(1+tcRate[1]); //后承包人采购
  352. double originalFbrCost = originalJzFees[i][2]; //原发包人采购
  353. double fbrCost = originalFbrCost/(1+jxslJz); //后发包人采购
  354. double originalJxrCost = originalJzFees[i][3]; //原机械费
  355. double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
  356. double measuresFee1 = (zjgcJzFee-originalFbrCost)*jzcsRate; //措施费一(2)
  357. double measuresFee2 = 0.00; //措施费一(1)
  358. double measuresFee3 = 0.00; //措施费二
  359. double fees = (zjgcJzFee-originalFbrCost)*jzgfRate[0]+(zjgcJzFee-originalFbrCost)*jzgfRate[1]*0.2; //规费
  360. double tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee)*texRate; //税金
  361. double totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax; //合计
  362. jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
  363. // jkxlDetailFee.setOriginalRate(orRate);
  364. jkxlDetailFee.setOriginalRgCost(originalRgCost);
  365. jkxlDetailFee.setRgCost(rgCost);
  366. jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
  367. jkxlDetailFee.setCbrCost(cbrCost);
  368. jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
  369. jkxlDetailFee.setFbrCost(fbrCost);
  370. jkxlDetailFee.setOriginalJxCost(originalJxrCost);
  371. jkxlDetailFee.setJxCost(jxCost);
  372. jkxlDetailFee.setMeasuresFee1(measuresFee1);
  373. jkxlDetailFee.setMeasuresFee2(measuresFee2);
  374. jkxlDetailFee.setMeasuresFee3(measuresFee3);
  375. jkxlDetailFee.setFees(fees);
  376. jkxlDetailFee.setOtherCost(otherFee);
  377. jkxlDetailFee.setTex(tax);
  378. jkxlDetailFee.setTotalFee(totalfee);
  379. jkxlDetailFee.setZjgcFee(zjgcJzFee);
  380. jkxlDetailFee.setWbsCode(BashInfo.JZWBSIDS [i]);
  381. jkxlDetailFee.setId(id);
  382. list.add(jkxlDetailFee);
  383. }
  384. for(int i=0;i<originalTotalAzFees.length;i++){
  385. JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
  386. double originalTotalCost = originalTotalAzFees[i]; //原合计
  387. double otherFee = qtFees[2]/fbfxFee*originalTotalCost; //其他费用
  388. double zjgcAzFee = zjgcAzFees[i][0];//直接工程费
  389. double rgAzFee = zjgcAzFees[i][1];//人工费
  390. double originalRgCost = originalAzFees[i][0];// 原人工费
  391. double rgCost = originalRgCost/(1+tcRate[0]); //后人工费
  392. double originalCbrCost = originalAzFees[i][1]; //原承包人采购
  393. double cbrCost = originalCbrCost/(1+tcRate[1]); //后承包人采购
  394. double originalFbrCost = originalAzFees[i][2]; //原发包人采购
  395. double fbrCost = originalFbrCost/(1+jxslJz); //后发包人采购
  396. double originalJxrCost = originalAzFees[i][3]; //原机械费
  397. double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
  398. double measuresFee1 = (zjgcAzFee-originalFbrCost/(1+jxslAz)*jxslAz)*azcsRate[0]+(rgAzFee/(1+tcRate[0])*azcsRate[1]); //措施费一(2)
  399. double measuresFee2 = 0.00; //措施费一(1)
  400. double measuresFee3 = 0.00; //措施费二
  401. double fees = rgAzFee/(1+tcRate[0])*azgfRate[0]+rgAzFee/(1+tcRate[0])*azgfRate[1]*1.2; //规费
  402. double tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee)*texRate; //税金
  403. double totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax; //合计
  404. jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
  405. jkxlDetailFee.setOriginalRgCost(originalRgCost);
  406. jkxlDetailFee.setRgCost(rgCost);
  407. jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
  408. jkxlDetailFee.setCbrCost(cbrCost);
  409. jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
  410. jkxlDetailFee.setFbrCost(fbrCost);
  411. jkxlDetailFee.setOriginalJxCost(originalJxrCost);
  412. jkxlDetailFee.setJxCost(jxCost);
  413. jkxlDetailFee.setMeasuresFee1(measuresFee1);
  414. jkxlDetailFee.setMeasuresFee2(measuresFee2);
  415. jkxlDetailFee.setMeasuresFee3(measuresFee3);
  416. jkxlDetailFee.setFees(fees);
  417. jkxlDetailFee.setOtherCost(otherFee);
  418. jkxlDetailFee.setTex(tax);
  419. jkxlDetailFee.setTotalFee(totalfee);
  420. jkxlDetailFee.setZjgcFee(zjgcAzFee);
  421. jkxlDetailFee.setWbsCode(BashInfo.AZWBSIDS[i]);
  422. jkxlDetailFee.setId(id);
  423. list.add(jkxlDetailFee);
  424. }
  425. double tz = 0.00; //总合计金额
  426. for(JkxlDetailFee jkxlDetailFee : list){
  427. tz += jkxlDetailFee.getTotalFee();
  428. }
  429. double gxFee = Math.abs(gcjsFee-tz-qtFees[0]-qtFees[1]-wsbFees);
  430. //将其他费用存入集合
  431. JkxlDetailFee jkxlDetailFee1 = new JkxlDetailFee();
  432. JkxlDetailFee jkxlDetailFee2 = new JkxlDetailFee();
  433. jkxlDetailFee1.setId(id);
  434. jkxlDetailFee1.setWbsCode("44120000");
  435. jkxlDetailFee1.setTotalFee(qtFees[0]);
  436. jkxlDetailFee2.setWbsCode("44220000");
  437. jkxlDetailFee2.setTotalFee(qtFees[1]);
  438. jkxlDetailFee2.setId(id);
  439. list.add(jkxlDetailFee1);
  440. list.add(jkxlDetailFee2);
  441. //保存费用明细
  442. for(JkxlDetailFee jkxlDetailFee:list){
  443. overheadLineMapper.save(jkxlDetailFee);
  444. }
  445. //保存未识别费用
  446. JkxlAdjustFee jkxlAdjustFee = new JkxlAdjustFee();
  447. jkxlAdjustFee.setId(id);
  448. jkxlAdjustFee.setType(BashInfo.KJYJSG);
  449. jkxlAdjustFee.setFee(wsbFees);
  450. feeAdjustService.save(jkxlAdjustFee);
  451. // JkxlAdjustFee jkxlAdjustFee1 = new JkxlAdjustFee();
  452. // jkxlAdjustFee1.setId(id);
  453. // jkxlAdjustFee1.setType(BashInfo.KJJGCC);
  454. // jkxlAdjustFee1.setFee(wsbFees[1]);
  455. // feeAdjustService.save(jkxlAdjustFee1);
  456. JkxlAdjustFee jkxlAdjustFee2 = new JkxlAdjustFee();
  457. jkxlAdjustFee2.setId(id);
  458. jkxlAdjustFee2.setType(BashInfo.CE);
  459. jkxlAdjustFee2.setFee(gxFee);
  460. feeAdjustService.save(jkxlAdjustFee2);
  461. // if(csFee!= 0.00){
  462. // JkxlAdjustFee jkxlAdjustFee3 = new JkxlAdjustFee();
  463. // jkxlAdjustFee3.setId(id);
  464. // jkxlAdjustFee3.setType(BashInfo.HZ_CH);
  465. // jkxlAdjustFee3.setFee(csFee);
  466. // feeAdjustService.save(jkxlAdjustFee3);
  467. // }
  468. }
  469. }