JkxlController.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859
  1. package com.jeeplus.modules.sg.web;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.jeeplus.common.utils.DateUtils;
  4. import com.jeeplus.common.utils.StringUtils;
  5. import com.jeeplus.common.utils.excel.ExportExcel;
  6. import com.jeeplus.common.utils.excel.ImportExcel;
  7. import com.jeeplus.core.web.BaseController;
  8. import com.jeeplus.modules.sg.entity.*;
  9. import com.jeeplus.modules.sg.service.JkxlService;
  10. import com.jeeplus.modules.sg.util.BashInfo;
  11. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Controller;
  14. import org.springframework.ui.Model;
  15. import org.springframework.web.bind.annotation.RequestBody;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.ResponseBody;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  20. import javax.servlet.http.HttpServletRequest;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.io.IOException;
  23. import java.math.BigDecimal;
  24. import java.text.SimpleDateFormat;
  25. import java.util.*;
  26. /**
  27. * 架空线路
  28. */
  29. @Controller
  30. @RequestMapping(value = "${adminPath}/jkxl")
  31. public class JkxlController extends BaseController {
  32. @Autowired
  33. private JkxlService jkxlService;
  34. @RequestMapping("/index")
  35. public String toImport(){
  36. return "modules/sg/free/indexProject";
  37. }
  38. /**
  39. *数据导入
  40. */
  41. @RequestMapping("/import")
  42. public String importFile(MultipartFile file, RedirectAttributes redirectAttributes, HttpServletRequest request, Model model){
  43. double sl = Double.valueOf(request.getParameter("jxsl"));
  44. String projectName = request.getParameter("name");
  45. String id = getId();
  46. try {
  47. double[] rate = getRate();
  48. WbsProject wbsProject = new WbsProject();
  49. wbsProject.setId(id);
  50. wbsProject.setName(projectName);
  51. wbsProject.setCreateDate(new Date());
  52. jkxlService.saveProject(wbsProject);
  53. List<JkxlData> list = getData(file,rate,id,sl);
  54. for(JkxlData jkxlData : list){
  55. jkxlService.save(jkxlData);
  56. }
  57. double[] tzfee = getTzFee(file);
  58. jkxlService.saveTzFee(tzfee,id);
  59. } catch (Exception e){
  60. addMessage(redirectAttributes, "导入失败");
  61. }
  62. addMessage(redirectAttributes, "导入成功");
  63. return "redirect:/a/jkxl/list?id="+id;
  64. }
  65. @RequestMapping("/gettz")
  66. @ResponseBody
  67. public List<JkxlData> getTz(TzData tzData){
  68. String id = tzData.getId();
  69. List<JkxlData> list = jkxlService.getList(id);
  70. List<JkxlData> list1 = new ArrayList<>();
  71. for(JkxlData jkxlData: list){
  72. if(jkxlData.getOriginalTotalCost() != null){
  73. list1.add(jkxlData);
  74. }
  75. }
  76. return list1;
  77. }
  78. /**
  79. *金额分摊调整
  80. */
  81. @RequestMapping("/fttz")
  82. public String reList(FtData ftData, Model model,RedirectAttributes redirectAttributes){
  83. String id = ftData.getId();
  84. String code = ftData.getCode();
  85. String state = ftData.getState();
  86. String type = ftData.getType();
  87. double fee = ftData.getFee();
  88. double total = 0.00;
  89. try {
  90. List<JkxlData> jkxl = jkxlService.getList(id);
  91. List<JkxlData> jkxlDatas = new ArrayList<>();
  92. for(JkxlData jkxlData: jkxl){
  93. if(jkxlData.getOriginalTotalCost() != null){
  94. jkxlDatas.add(jkxlData);
  95. }
  96. }
  97. if(code.equals("1")){
  98. for(JkxlData jkxlData: jkxlDatas) {
  99. total += jkxlData.getRgCost();
  100. }
  101. for(JkxlData jkxlData1: jkxlDatas){
  102. JkxlData jkxlData = new JkxlData();
  103. jkxlData.setId(id);
  104. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  105. double rgFee = jkxlData1.getRgCost();
  106. double totalFee = jkxlData1.getTotalFee();
  107. double ftFee = rgFee/total*fee;
  108. jkxlData.setRgFtFee(ftFee);
  109. if(state.equals("1")){
  110. double zFee = totalFee+ftFee;
  111. jkxlData.setTotalFee(zFee);
  112. }else {
  113. double zFee = totalFee-ftFee;
  114. jkxlData.setTotalFee(zFee);
  115. }
  116. jkxlService.updataDate(jkxlData);
  117. }
  118. }
  119. if(code.equals("2")){
  120. for(JkxlData jkxlData: jkxlDatas) {
  121. total += jkxlData.getCbrCost();
  122. }
  123. for(JkxlData jkxlData1: jkxlDatas){
  124. JkxlData jkxlData = new JkxlData();
  125. jkxlData.setId(id);
  126. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  127. double rgFee = jkxlData1.getCbrCost();
  128. double totalFee = jkxlData1.getTotalFee();
  129. double ftFee = rgFee/total*fee;
  130. jkxlData.setCbrFtFee(ftFee);
  131. if(state.equals("1")){
  132. double zFee = totalFee+ftFee;
  133. jkxlData.setTotalFee(zFee);
  134. }else {
  135. double zFee = totalFee-ftFee;
  136. jkxlData.setTotalFee(zFee);
  137. }
  138. jkxlService.updataDate(jkxlData);
  139. }
  140. }
  141. if(code.equals("3")){
  142. for(JkxlData jkxlData: jkxlDatas) {
  143. total += jkxlData.getFbrCost();
  144. }
  145. for(JkxlData jkxlData1: jkxlDatas){
  146. JkxlData jkxlData = new JkxlData();
  147. jkxlData.setId(id);
  148. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  149. double rgFee = jkxlData1.getFbrCost();
  150. double totalFee = jkxlData1.getTotalFee();
  151. double ftFee = rgFee/total*fee;
  152. jkxlData.setFbrFtFee(ftFee);
  153. if(state.equals("1")){
  154. double zFee = totalFee+ftFee;
  155. jkxlData.setTotalFee(zFee);
  156. }else {
  157. double zFee = totalFee-ftFee;
  158. jkxlData.setTotalFee(zFee);
  159. }
  160. jkxlService.updataDate(jkxlData);
  161. }
  162. }
  163. if(code.equals("4")){
  164. for(JkxlData jkxlData: jkxlDatas) {
  165. total += jkxlData.getJxCost();
  166. }
  167. for(JkxlData jkxlData1: jkxlDatas){
  168. JkxlData jkxlData = new JkxlData();
  169. jkxlData.setId(id);
  170. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  171. double rgFee = jkxlData1.getJxCost();
  172. double totalFee = jkxlData1.getTotalFee();
  173. double ftFee = rgFee/total*fee;
  174. jkxlData.setJxFtFee(ftFee);
  175. if(state.equals("1")){
  176. double zFee = totalFee+ftFee;
  177. jkxlData.setTotalFee(zFee);
  178. }else {
  179. double zFee = totalFee-ftFee;
  180. jkxlData.setTotalFee(zFee);
  181. }
  182. jkxlService.updataDate(jkxlData);
  183. }
  184. }
  185. if(code.equals("5")){
  186. for(JkxlData jkxlData: jkxlDatas) {
  187. total += jkxlData.getMeasuresFee1();
  188. }
  189. for(JkxlData jkxlData1: jkxlDatas){
  190. JkxlData jkxlData = new JkxlData();
  191. jkxlData.setId(id);
  192. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  193. double rgFee = jkxlData1.getMeasuresFee1();
  194. double totalFee = jkxlData1.getTotalFee();
  195. double ftFee = rgFee/total*fee;
  196. if(state.equals("1")){
  197. double zFee = totalFee+ftFee;
  198. jkxlData.setMeasuresFee1(rgFee+ftFee);
  199. jkxlData.setTotalFee(zFee);
  200. }else {
  201. double zFee = totalFee-ftFee;
  202. jkxlData.setMeasuresFee1(rgFee-ftFee);
  203. jkxlData.setTotalFee(zFee);
  204. }
  205. jkxlService.updataDate(jkxlData);
  206. }
  207. }
  208. if(code.equals("6")){
  209. for(JkxlData jkxlData: jkxlDatas) {
  210. total += jkxlData.getMeasuresFee2();
  211. }
  212. for(JkxlData jkxlData1: jkxlDatas){
  213. JkxlData jkxlData = new JkxlData();
  214. jkxlData.setId(id);
  215. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  216. double rgFee = jkxlData1.getMeasuresFee2();
  217. double totalFee = jkxlData1.getTotalFee();
  218. double ftFee = rgFee/total*fee;
  219. if(state.equals("1")){
  220. double zFee = totalFee+ftFee;
  221. jkxlData.setMeasuresFee1(rgFee+ftFee);
  222. jkxlData.setTotalFee(zFee);
  223. }else {
  224. double zFee = totalFee-ftFee;
  225. jkxlData.setMeasuresFee1(rgFee-ftFee);
  226. jkxlData.setTotalFee(zFee);
  227. }
  228. jkxlService.updataDate(jkxlData);
  229. }
  230. }
  231. if(code.equals("7")){
  232. for(JkxlData jkxlData: jkxlDatas) {
  233. total += jkxlData.getMeasuresFee3();
  234. }
  235. for(JkxlData jkxlData1: jkxlDatas){
  236. JkxlData jkxlData = new JkxlData();
  237. jkxlData.setId(id);
  238. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  239. double rgFee = jkxlData1.getMeasuresFee3();
  240. double totalFee = jkxlData1.getTotalFee();
  241. double ftFee = rgFee/total*fee;
  242. if(state.equals("1")){
  243. double zFee = totalFee+ftFee;
  244. jkxlData.setMeasuresFee1(rgFee+ftFee);
  245. jkxlData.setTotalFee(zFee);
  246. }else {
  247. double zFee = totalFee-ftFee;
  248. jkxlData.setMeasuresFee1(rgFee-ftFee);
  249. jkxlData.setTotalFee(zFee);
  250. }
  251. jkxlService.updataDate(jkxlData);
  252. }
  253. }
  254. if(code.equals("8")){
  255. for(JkxlData jkxlData: jkxlDatas) {
  256. total += jkxlData.getOtherCost();
  257. }
  258. for(JkxlData jkxlData1: jkxlDatas){
  259. JkxlData jkxlData = new JkxlData();
  260. jkxlData.setId(id);
  261. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  262. double rgFee = jkxlData1.getOtherCost();
  263. double totalFee = jkxlData1.getTotalFee();
  264. double ftFee = rgFee/total*fee;
  265. if(state.equals("1")){
  266. double zFee = totalFee+ftFee;
  267. jkxlData.setMeasuresFee1(rgFee+ftFee);
  268. jkxlData.setTotalFee(zFee);
  269. }else {
  270. double zFee = totalFee-ftFee;
  271. jkxlData.setMeasuresFee1(rgFee-ftFee);
  272. jkxlData.setTotalFee(zFee);
  273. }
  274. jkxlService.updataDate(jkxlData);
  275. }
  276. }
  277. if(code.equals("9")){
  278. for(JkxlData jkxlData: jkxlDatas) {
  279. total += jkxlData.getFees();
  280. }
  281. for(JkxlData jkxlData1: jkxlDatas){
  282. JkxlData jkxlData = new JkxlData();
  283. jkxlData.setId(id);
  284. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  285. double rgFee = jkxlData1.getFees();
  286. double totalFee = jkxlData1.getTotalFee();
  287. double ftFee = rgFee/total*fee;
  288. if(state.equals("1")){
  289. double zFee = totalFee+ftFee;
  290. jkxlData.setMeasuresFee1(rgFee+ftFee);
  291. jkxlData.setTotalFee(zFee);
  292. }else {
  293. double zFee = totalFee-ftFee;
  294. jkxlData.setMeasuresFee1(rgFee-ftFee);
  295. jkxlData.setTotalFee(zFee);
  296. }
  297. jkxlService.updataDate(jkxlData);
  298. }
  299. }
  300. if(code.equals("10")){
  301. for(JkxlData jkxlData: jkxlDatas) {
  302. total += jkxlData.getTex();
  303. }
  304. for(JkxlData jkxlData1: jkxlDatas){
  305. JkxlData jkxlData = new JkxlData();
  306. jkxlData.setId(id);
  307. jkxlData.setWbsCode(jkxlData1.getWbsCode());
  308. double rgFee = jkxlData1.getTex();
  309. double totalFee = jkxlData1.getTotalFee();
  310. double ftFee = rgFee/total*fee;
  311. if(state.equals("1")){
  312. double zFee = totalFee+ftFee;
  313. jkxlData.setMeasuresFee1(rgFee+ftFee);
  314. jkxlData.setTotalFee(zFee);
  315. }else {
  316. double zFee = totalFee-ftFee;
  317. jkxlData.setMeasuresFee1(rgFee-ftFee);
  318. jkxlData.setTotalFee(zFee);
  319. }
  320. jkxlService.updataDate(jkxlData);
  321. }
  322. }
  323. TzData tzData = new TzData();
  324. tzData.setType(type);
  325. tzData.setId(id);
  326. jkxlService.updateFee(tzData);
  327. } catch (Exception e){
  328. addMessage(redirectAttributes, "调整失败");
  329. }
  330. addMessage(redirectAttributes, "调整成功");
  331. return "redirect:/a/jkxl/list?id="+id;
  332. }
  333. /**
  334. *金额单独调整
  335. */
  336. @RequestMapping("/ddtz")
  337. public String ddtz(TzData tzData, Model model, RedirectAttributes redirectAttributes){
  338. String id = tzData.getId();
  339. String type = tzData.getType();
  340. String state = tzData.getState();
  341. double fee = tzData.getFee();
  342. String data1 = tzData.getData1();
  343. String row = data1.replaceAll("&quot;","\\\"");
  344. List<DdtzData> ts = (List<DdtzData>) JSONArray.parseArray(row, DdtzData.class);
  345. try {
  346. for(DdtzData ddtzData: ts){
  347. double tzFee = Double.valueOf(ddtzData.getFee());
  348. String wbsCode = ddtzData.getWbsCode();
  349. double otherFee = jkxlService.getDate(id,wbsCode).getOtherCost();
  350. double totalFee = jkxlService.getDate(id,wbsCode).getTotalFee();
  351. if(state.equals("1")){
  352. otherFee = otherFee+tzFee;
  353. totalFee = totalFee+tzFee;
  354. }
  355. if(state.equals("2")){
  356. otherFee = otherFee-tzFee;
  357. totalFee = totalFee-tzFee;
  358. }
  359. JkxlData jkxlData = new JkxlData();
  360. jkxlData.setId(id);
  361. jkxlData.setWbsCode(wbsCode);
  362. jkxlData.setOtherCost(otherFee);
  363. jkxlData.setTotalFee(totalFee);
  364. jkxlService.updataDate(jkxlData);
  365. }
  366. jkxlService.updateFee(tzData);
  367. }catch (Exception e){
  368. addMessage(redirectAttributes, "调整失败");
  369. }
  370. addMessage(redirectAttributes, "调整成功");
  371. return "redirect:/a/jkxl/list?id="+id;
  372. }
  373. @RequestMapping("/list")
  374. public String list(HttpServletRequest request,Model model){
  375. String id = request.getParameter("id");
  376. JkxlData jkxlData = new JkxlData();
  377. TzData tzData = new TzData();
  378. jkxlData.setId(id);
  379. tzData.setId(id);
  380. List<JkxlData> list1 = new ArrayList<>();
  381. list1.add(jkxlData);
  382. List<JkxlData> list = jkxlService.getList(id);
  383. // JkxlData jkxlData1 = getTotal(list);
  384. // list.add(jkxlData1);
  385. list.addAll(getTotal(list));
  386. List<TzData> list2 = jkxlService.getTzFee(tzData);
  387. HashMap map = new HashMap();
  388. map.put("list1",list1);
  389. map.put("list",list);
  390. map.put("list2",list2);
  391. model.addAttribute("map",map);
  392. return "modules/sg/free/wbslist";
  393. }
  394. /**
  395. *导出
  396. */
  397. @RequestMapping("/export")
  398. public String export(HttpServletRequest request, HttpServletResponse response,Model model,RedirectAttributes redirectAttributes) {
  399. String id = request.getParameter("id");
  400. try{
  401. String fileName = "架空线路"+ DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
  402. List<JkxlData> list = jkxlService.findList(id);
  403. new ExportExcel(null,JkxlData.class).setDataList(list).write(response, fileName).dispose();
  404. return null;
  405. }catch (Exception e){
  406. addMessage(redirectAttributes, "导出失败");
  407. }
  408. addMessage(redirectAttributes, "导出成功");
  409. return "redirect:/a/jkxl/list?id="+id;
  410. }
  411. public List<JkxlData> getData(MultipartFile file,double[] rate,String id,double sl) throws IOException, InvalidFormatException {
  412. ImportExcel importExcel = new ImportExcel(file,1,BashInfo.SHEET_FBFXJJ); //分部分项工程量清单计价表
  413. ImportExcel csqd = new ImportExcel(file,1,BashInfo.SHEET_CSB); // 措施项目清单计价表(一)
  414. ImportExcel gf = new ImportExcel(file,1,BashInfo.SHEET_GFQD); //规费项目清单计价表
  415. ImportExcel qt = new ImportExcel(file,1,BashInfo.SHEET_QTFY); //其他项目清单计价表
  416. ImportExcel total = new ImportExcel(file,1,BashInfo.SHEET_HZB ); //工程项目竣工结算汇总表
  417. ImportExcel gzhz = new ImportExcel(file,1,BashInfo.SHEET_GCHZ ); //架空线路工程费用汇总表
  418. double[] csRate = getCsRate(csqd);
  419. double[] gfRate = getGfRate(gf);
  420. double[] qtFees = getQtFees(qt);
  421. double[] wsbFees = getFees(total);
  422. int[] zjgcFee = getZjgcFee(gzhz);
  423. double texRate = getTexRate(total);
  424. double totalFee = 0.00;
  425. List<JkxlData> list = new ArrayList<>();
  426. int lastRow = importExcel.getLastDataRowNum();
  427. int[] row = new int[6];
  428. for(int i=0;i<lastRow;i++){
  429. String type = importExcel.getValue(i+1,2);
  430. if(type.equals(BashInfo.PROJECTNAME)){
  431. totalFee = importExcel.getDouble(i+1,12);
  432. continue;
  433. }
  434. if(type.equals(BashInfo.JCGC)){
  435. row[0] = i+1;
  436. continue;
  437. }
  438. if(type.equals(BashInfo.GTGC)){
  439. row[1] = i+1;
  440. continue;
  441. }
  442. if(type.equals(BashInfo.JDGC)){
  443. row[2] = i+1;
  444. continue;
  445. }
  446. if(type.equals(BashInfo.JXGC)){
  447. row[3] = i+1;
  448. continue;
  449. }
  450. if(type.equals(BashInfo.FJAZGC)){
  451. row[4] = i+1;
  452. continue;
  453. }
  454. if(type.equals(BashInfo.FZGC)){
  455. row[5] = i+1;
  456. break;
  457. }
  458. }
  459. for(int i=0;i<6;i++){
  460. JkxlData jkxlData = new JkxlData();
  461. double originalTotalCost = gzhz.getDouble(zjgcFee[i],2); //原合计
  462. double otherRate = originalTotalCost/totalFee; //其他费用分摊比例
  463. double orRate = new BigDecimal(otherRate).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); //四舍五入
  464. double btc = wsbFees[0]*orRate; //补调差额
  465. double jcl = wsbFees[1]*orRate; //减材料费
  466. double otherFee = qtFees[2]*otherRate; //其他费用
  467. double zjgcFees = gzhz.getDouble(zjgcFee[i],3);//直接工程费
  468. double originalRgCost = importExcel.getDouble(row[i],13); //原人工费
  469. double rgCost = originalRgCost/(1+rate[0]); //后人工费
  470. double originalCbrCost = importExcel.getDouble(row[i],14); //原承包人采购
  471. double cbrCost = originalCbrCost/(1+rate[1]); //后承包人采购
  472. double originalFbrCost = importExcel.getDouble(row[i],15); //原发包人采购
  473. double fbrCost = originalFbrCost/(1+sl); //后发包人采购
  474. double originalJxrCost = importExcel.getDouble(row[i],17); //原机械费
  475. double jxCost = originalJxrCost/(1+rate[2]); //后机械费
  476. double measuresFee1 = (zjgcFees-fbrCost*sl)*csRate[0]; //措施费1
  477. // double measuresFee1 = (rgCost+cbrCost+fbrCost+jxCost)*csRate[0]; //措施费1
  478. double measuresFee2 = rgCost*csRate[1]; //措施费2
  479. double fees = rgCost*gfRate[1]*1.12+rgCost*gfRate[0]; //规费
  480. double tax = (originalTotalCost+measuresFee1+measuresFee2+fees+otherFee-originalFbrCost)*texRate; //税金
  481. double totalfee = originalTotalCost+measuresFee1+measuresFee2+fees+otherFee+tax-originalFbrCost; //合计
  482. jkxlData.setOriginalTotalCost(originalTotalCost);
  483. jkxlData.setOriginalRate(orRate);
  484. jkxlData.setOriginalRgCost(originalRgCost);
  485. jkxlData.setRgCost(rgCost);
  486. jkxlData.setOriginalCbrCost(originalCbrCost);
  487. jkxlData.setCbrCost(cbrCost);
  488. jkxlData.setOriginalFbrCost(originalFbrCost);
  489. jkxlData.setFbrCost(fbrCost);
  490. jkxlData.setOriginalJxCost(originalJxrCost);
  491. jkxlData.setJxCost(jxCost);
  492. jkxlData.setMeasuresFee1(measuresFee1);
  493. jkxlData.setMeasuresFee2(measuresFee2);
  494. jkxlData.setFees(fees);
  495. jkxlData.setOtherCost(otherFee);
  496. jkxlData.setTex(tax);
  497. jkxlData.setTotalFee(totalfee);
  498. jkxlData.setBzFee(btc);
  499. jkxlData.setJkFee(jcl);
  500. jkxlData.setZjgcFee(zjgcFees);
  501. jkxlData.setWbsCode(BashInfo.ids[i]);
  502. jkxlData.setId(id);
  503. list.add(jkxlData);
  504. }
  505. double tz = 0.00;
  506. for(JkxlData jkxlData : list){
  507. tz += jkxlData.getTotalFee();
  508. }
  509. if(wsbFees[2]>tz){
  510. double gxFee = wsbFees[2]-tz-qtFees[0]-qtFees[1]-wsbFees[0]-wsbFees[1];
  511. double rate1 = 0.00;
  512. double gxFee1 = 0.00;
  513. double totalF = 0.00;
  514. for(JkxlData jkxlData: list){
  515. rate1 = jkxlData.getTotalFee()/tz;
  516. gxFee1 = gxFee*rate1;
  517. totalF = gxFee1 + jkxlData.getTotalFee();
  518. jkxlData.setGxFee(Math.abs(gxFee1));
  519. jkxlData.setTotalFee(totalF);
  520. }
  521. }else {
  522. double gxFee = tz+qtFees[0]+qtFees[1]+wsbFees[0]+wsbFees[1]-wsbFees[2];
  523. double rate1 = 0.00;
  524. double gxFee1 = 0.00;
  525. double totalF = 0.00;
  526. for(JkxlData jkxlData: list){
  527. rate1 = jkxlData.getTotalFee()/tz;
  528. gxFee1 = gxFee*rate1;
  529. totalF = jkxlData.getTotalFee()-gxFee1;
  530. jkxlData.setGxFee(Math.abs(gxFee1));
  531. jkxlData.setTotalFee(totalF);
  532. }
  533. }
  534. JkxlData jkxlData1 = new JkxlData();
  535. JkxlData jkxlData2 = new JkxlData();
  536. jkxlData1.setId(id);
  537. jkxlData1.setWbsCode("34120000");
  538. jkxlData1.setTotalFee(qtFees[0]);
  539. jkxlData2.setWbsCode("34220000");
  540. jkxlData2.setTotalFee(qtFees[1]);
  541. jkxlData2.setId(id);
  542. list.add(jkxlData1);
  543. list.add(jkxlData2);
  544. return list;
  545. }
  546. /**
  547. *获取措施费率
  548. */
  549. public double[] getCsRate(ImportExcel importExcel){
  550. int lastRow = importExcel.getLastDataRowNum();
  551. double lsRate = 0.00;
  552. double aqRate = 0.00;
  553. double totalRate = 0.00;
  554. for(int i=2;i<lastRow;i++){
  555. String type = importExcel.getValue(i+1,1);
  556. if(type.equals(BashInfo.CS_LS)){
  557. lsRate = importExcel.getDouble(i+1,3);
  558. }
  559. if(type.equals(BashInfo.CS_AQWM)){
  560. aqRate = importExcel.getDouble(i+1,3);
  561. }
  562. totalRate += importExcel.getDouble(i+1,3);
  563. }
  564. double[] rate = new double[2];
  565. rate[0] = (lsRate+aqRate)/100;
  566. rate[1] = (totalRate-lsRate-aqRate)/100;
  567. return rate;
  568. }
  569. /**
  570. * 读取税率
  571. */
  572. public double getTexRate(ImportExcel importExcel){
  573. double rate = 0.00;
  574. int lastRow = importExcel.getLastDataRowNum();
  575. for(int i=2;i<lastRow;i++){
  576. String st = importExcel.getValue(i+1,1);
  577. if(st.contains("税金")){
  578. int a = st.indexOf(":");
  579. int a1 = st.indexOf("%");
  580. String st1 = st.substring(a+2,a1);
  581. System.out.println(st1);
  582. rate = Double.valueOf(st1)/100;
  583. break;
  584. }
  585. }
  586. return rate;
  587. }
  588. /**
  589. *获取规费率
  590. */
  591. public double[] getGfRate(ImportExcel importExcel) {
  592. int lastRow = importExcel.getLastDataRowNum();
  593. double totalRate = 0.00;
  594. double wxzyRate = 0.00;
  595. for (int i = 2; i < lastRow; i++) {
  596. String type = importExcel.getValue(i + 1, 1);
  597. if (type.equals(BashInfo.GF_WXZY)) {
  598. wxzyRate = importExcel.getDouble(i + 1, 3);
  599. }
  600. if (!importExcel.getValue(i + 1, 2).equals("")) {
  601. totalRate += importExcel.getDouble(i + 1, 3);
  602. }
  603. }
  604. double[] rate = new double[2];
  605. rate[0] = wxzyRate / 100;
  606. rate[1] = (totalRate - wxzyRate) / 100;
  607. return rate;
  608. }
  609. /**
  610. * 获取其他费用
  611. */
  612. public double[] getQtFees(ImportExcel importExcel) {
  613. int lastRow = importExcel.getLastDataRowNum();
  614. double cdFree = 0.00;
  615. double zbFree = 0.00;
  616. double totalFree = 0.00;
  617. for(int i=2;i<lastRow;i++){
  618. String type = importExcel.getValue(i+1,1);
  619. String type1 = importExcel.getValue(i+1,0);
  620. if(type.equals(BashInfo.QT_SGCDZY)){
  621. cdFree = importExcel.getDouble(i+1,2);
  622. }
  623. if(type.equals(BashInfo.QT_ZBDL)){
  624. zbFree = importExcel.getDouble(i+1,2);
  625. }
  626. if(type1.equals(BashInfo.QT_HJ)){
  627. totalFree = importExcel.getDouble(i+1,2);
  628. }
  629. }
  630. double[] rate = new double[3];
  631. rate[0] = cdFree;
  632. rate[1] = zbFree;
  633. rate[2] = totalFree-cdFree-zbFree;
  634. return rate;
  635. }
  636. /**
  637. * 获取调差系数
  638. * @return
  639. */
  640. public double[] getRate(){
  641. double[] rate = new double[3];
  642. rate[0] = jkxlService.getValueByName(BashInfo.RATIO_RGTC).getValue()/100;
  643. rate[1] = jkxlService.getValueByName(BashInfo.RATIO_CLTC).getValue()/100;
  644. rate[2] = jkxlService.getValueByName(BashInfo.RATIO_JXTC).getValue()/100;
  645. return rate;
  646. }
  647. /**
  648. * 获取补增值税税率调整差额和扣减甲供材超供材料费
  649. */
  650. public double[] getFees(ImportExcel importExcel){
  651. int lastRow = importExcel.getLastDataRowNum();
  652. double bzFree = 0.00;
  653. double kcFree = 0.00;
  654. double gcjs = 0.00;
  655. for(int i=0;i<lastRow;i++){
  656. String type = importExcel.getValue(i+1,1);
  657. if(type.equals(BashInfo.BZZSSL)){
  658. bzFree = importExcel.getDouble(i+1,2);
  659. continue;
  660. }
  661. if(type.equals(BashInfo.KJJGCC)){
  662. kcFree = importExcel.getDouble(i+1,2);
  663. continue;
  664. }
  665. if(type.equals(BashInfo.TBJG) || type.equals(BashInfo.GCJS)){
  666. gcjs = importExcel.getDouble(i+1,2);
  667. }
  668. }
  669. double[] wsb = new double[3];
  670. wsb[0] = bzFree;
  671. wsb[1] = kcFree;
  672. wsb[2] = gcjs;
  673. return wsb;
  674. }
  675. /**
  676. *获取直接工程费
  677. */
  678. public int[] getZjgcFee(ImportExcel importExcel) {
  679. int lastRow = importExcel.getLastDataRowNum();
  680. int[] row = new int[6];
  681. for(int i=0;i<lastRow;i++){
  682. String type = importExcel.getValue(i+1,1);
  683. if(type.equals(BashInfo.HZ_JCGC)){
  684. row[0] = i+1;
  685. continue;
  686. }
  687. if(type.equals(BashInfo.HZ_GTGC)){
  688. row[1] = i+1;
  689. continue;
  690. }
  691. if(type.equals(BashInfo.HZ_JDGC)){
  692. row[2] = i+1;
  693. continue;
  694. }
  695. if(type.equals(BashInfo.HZ_JXGC)){
  696. row[3] = i+1;
  697. continue;
  698. }
  699. if(type.equals(BashInfo.HZ_FJAZGC)){
  700. row[4] = i+1;
  701. continue;
  702. }
  703. if(type.equals(BashInfo.HZ_FZ)){
  704. row[5] = i+1;
  705. break;
  706. }
  707. }
  708. return row;
  709. }
  710. public double[] getTzFee(MultipartFile file) throws IOException, InvalidFormatException {
  711. ImportExcel total = new ImportExcel(file,1,BashInfo.SHEET_HZB );
  712. double[] wsb = getFees(total);
  713. return wsb;
  714. }
  715. /**
  716. * 创建项目ID
  717. */
  718. public String getId() {
  719. SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
  720. String newDate=sdf.format(new Date());
  721. String result="";
  722. Random random=new Random();
  723. for(int i=0;i<3;i++){
  724. result+=random.nextInt(10);
  725. }
  726. return newDate+result;
  727. }
  728. private List<JkxlData> getTotal(List<JkxlData> list) {
  729. List<JkxlData> list1 = new ArrayList<>();
  730. List<JkxlData> list2 = new ArrayList<>();
  731. for(JkxlData jkxlData: list){
  732. if(jkxlData.getOriginalTotalCost() != null){
  733. list1.add(jkxlData);
  734. }
  735. }
  736. for(JkxlData jkxlData: list){
  737. if(jkxlData.getOriginalTotalCost() == null && jkxlData.getTotalFee() != null){
  738. list2.add(jkxlData);
  739. }
  740. }
  741. double total1 = 0.00;
  742. for (JkxlData jkxlData :list2){
  743. total1 += jkxlData.getTotalFee();
  744. }
  745. double [] zFee = new double[22];
  746. for(JkxlData jkxlData:list1){
  747. zFee[0] += jkxlData.getOriginalTotalCost();
  748. zFee[1] += jkxlData.getZjgcFee();
  749. zFee[2] += jkxlData.getOriginalRgCost();
  750. zFee[3] += jkxlData.getOriginalCbrCost();
  751. zFee[4] += jkxlData.getOriginalFbrCost();
  752. zFee[5] += jkxlData.getOriginalJxCost();
  753. zFee[6] += jkxlData.getRgCost();
  754. zFee[7] += jkxlData.getCbrCost();
  755. zFee[8] += jkxlData.getFbrCost();
  756. zFee[9] += jkxlData.getJxCost();
  757. zFee[10] += jkxlData.getRgFtFee()!=null?jkxlData.getRgFtFee():0.00;
  758. zFee[11] += jkxlData.getCbrFtFee()!=null?jkxlData.getCbrFtFee():0.00;
  759. zFee[12] += jkxlData.getFbrFtFee()!=null?jkxlData.getFbrFtFee():0.00;
  760. zFee[13] += jkxlData.getJxFtFee()!=null?jkxlData.getJxFtFee():0.00;
  761. zFee[14] += jkxlData.getMeasuresFee1();
  762. zFee[15] += jkxlData.getMeasuresFee2();
  763. zFee[16] += jkxlData.getMeasuresFee3()!=null?jkxlData.getMeasuresFee3():0.00;
  764. zFee[17] += jkxlData.getOtherCost();
  765. zFee[18] += jkxlData.getFees();
  766. zFee[19] += jkxlData.getTex();
  767. zFee[20] += jkxlData.getGxFee();
  768. zFee[21] += jkxlData.getTotalFee();
  769. }
  770. JkxlData jkxlData = new JkxlData();
  771. JkxlData jkxlData1 = new JkxlData();
  772. jkxlData.setOriginalTotalCost(new BigDecimal(zFee[0]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  773. jkxlData.setZjgcFee(new BigDecimal(zFee[1]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  774. jkxlData.setOriginalRgCost(new BigDecimal(zFee[2]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  775. jkxlData.setOriginalCbrCost(new BigDecimal(zFee[3]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  776. jkxlData.setOriginalFbrCost(new BigDecimal(zFee[4]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  777. jkxlData.setOriginalJxCost(new BigDecimal(zFee[5]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  778. jkxlData.setRgCost(new BigDecimal(zFee[6]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  779. jkxlData.setCbrCost(new BigDecimal(zFee[7]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  780. jkxlData.setFbrCost(new BigDecimal(zFee[8]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  781. jkxlData.setJxCost(new BigDecimal(zFee[9]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  782. jkxlData.setRgFtFee(new BigDecimal(zFee[10]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  783. jkxlData.setCbrFtFee(new BigDecimal(zFee[11]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  784. jkxlData.setFbrFtFee(new BigDecimal(zFee[12]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  785. jkxlData.setJxFtFee(new BigDecimal(zFee[13]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  786. jkxlData.setMeasuresFee1(new BigDecimal(zFee[14]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  787. jkxlData.setMeasuresFee2(new BigDecimal(zFee[15]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  788. jkxlData.setMeasuresFee3(new BigDecimal(zFee[16]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  789. jkxlData.setOtherCost(new BigDecimal(zFee[17]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  790. jkxlData.setFees(new BigDecimal(zFee[18]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  791. jkxlData.setTex(new BigDecimal(zFee[19]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  792. jkxlData.setGxFee(new BigDecimal(zFee[20]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  793. jkxlData.setTotalFee(new BigDecimal(zFee[21]).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  794. jkxlData.setWbsCode("合计");
  795. jkxlData.setParentNode("30000000");
  796. jkxlData.setState("1");
  797. jkxlData1.setWbsCode("合计");
  798. jkxlData1.setParentNode("34000000");
  799. jkxlData1.setState("0");
  800. jkxlData1.setTotalFee(total1);
  801. List<JkxlData> list3 = new ArrayList<>();
  802. list3.add(jkxlData);
  803. list3.add(jkxlData1);
  804. return list3;
  805. }
  806. }