OverheadLineService.java 28 KB

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