JkxlController.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package com.jeeplus.modules.sg.web;
  2. import com.jeeplus.common.utils.excel.ImportExcel;
  3. import com.jeeplus.core.web.BaseController;
  4. import com.jeeplus.modules.sg.entity.JkxlData;
  5. import com.jeeplus.modules.sg.entity.WbsProject;
  6. import com.jeeplus.modules.sg.service.JkxlService;
  7. import com.jeeplus.modules.sg.util.BashInfo;
  8. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.ui.Model;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.multipart.MultipartFile;
  14. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  15. import javax.servlet.http.HttpServletRequest;
  16. import java.io.IOException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.ArrayList;
  19. import java.util.Date;
  20. import java.util.List;
  21. import java.util.Random;
  22. /**
  23. * 架空线路
  24. */
  25. @Controller
  26. @RequestMapping(value = "${adminPath}/jkxl")
  27. public class JkxlController extends BaseController {
  28. @Autowired
  29. private JkxlService jkxlService;
  30. @RequestMapping("/import")
  31. public String importFile(String file, RedirectAttributes redirectAttributes, HttpServletRequest request, Model model){
  32. double sl = Double.valueOf(request.getParameter("jxsl"));
  33. String projectName = request.getParameter("name");
  34. String id = getId();
  35. try {
  36. double[] rate = getRate();
  37. WbsProject wbsProject = new WbsProject();
  38. wbsProject.setId(id);
  39. wbsProject.setName(projectName);
  40. wbsProject.setCreateDate(new Date());
  41. List<JkxlData> list = getData(file,rate,id,sl);
  42. for(JkxlData jkxlData : list){
  43. jkxlService.save(jkxlData);
  44. }
  45. } catch (Exception e){
  46. addMessage(redirectAttributes, "导入失败");
  47. }
  48. addMessage(redirectAttributes, "导入成功");
  49. return "redirect:/a/jkxl/list?id="+id;
  50. }
  51. @RequestMapping("/list")
  52. public String list(HttpServletRequest request,Model model){
  53. String id = request.getParameter("id");
  54. return "";
  55. }
  56. public List<JkxlData> getData(String file,double[] rate,String id,double sl) throws IOException, InvalidFormatException {
  57. ImportExcel importExcel = new ImportExcel(file,1,3);
  58. ImportExcel csqd = new ImportExcel(file,1,8);
  59. ImportExcel gf = new ImportExcel(file,1,17);
  60. ImportExcel qt = new ImportExcel(file,1,10);
  61. ImportExcel total = new ImportExcel(file,1,1);
  62. double[] csRate = getCsRate(csqd);
  63. double[] gfRate = getGfRate(gf);
  64. double[] qtFees = getQtFees(qt);
  65. double bzFees = getFees(total);
  66. double totalFee = 0.00;
  67. List<JkxlData> list = new ArrayList<>();
  68. int lastRow = importExcel.getLastDataRowNum();
  69. int[] row = new int[6];
  70. for(int i=0;i<lastRow;i++){
  71. String type = importExcel.getValue(i+1,2);
  72. if(type.equals(BashInfo.PROJECTNAME)){
  73. totalFee = importExcel.getDouble(i+1,12);
  74. continue;
  75. }
  76. if(type.equals(BashInfo.JCGC)){
  77. row[0] = i+1;
  78. continue;
  79. }
  80. if(type.equals(BashInfo.GTGC)){
  81. row[1] = i+1;
  82. continue;
  83. }
  84. if(type.equals(BashInfo.JDGC)){
  85. row[2] = i+1;
  86. continue;
  87. }
  88. if(type.equals(BashInfo.JXGC)){
  89. row[3] = i+1;
  90. continue;
  91. }
  92. if(type.equals(BashInfo.FJAZGC)){
  93. row[4] = i+1;
  94. continue;
  95. }
  96. if(type.equals(BashInfo.FZGC)){
  97. row[5] = i+1;
  98. break;
  99. }
  100. }
  101. for(int i=0;i<6;i++){
  102. JkxlData jkxlData = new JkxlData();
  103. double originalTotalCost = importExcel.getDouble(row[i],12); //原合计
  104. double otherRate = originalTotalCost/totalFee; //其他费用分摊比例
  105. double otherFee = qtFees[2]*otherRate; //其他费用
  106. double originalRgCost = importExcel.getDouble(row[i],13); //原人工费
  107. double rgCost = originalRgCost/(1+rate[0]); //后人工费
  108. double originalCbrCost = importExcel.getDouble(row[i],14); //原承包人采购
  109. double cbrCost = originalCbrCost/(1+rate[1]); //后承包人采购
  110. double originalFbrCost = importExcel.getDouble(row[i],15); //原发包人采购
  111. double fbrCost = originalFbrCost/(1+sl); //后发包人采购
  112. double originalJxrCost = importExcel.getDouble(row[i],17); //原机械费
  113. double jxCost = originalJxrCost/(1+rate[2]); //后机械费
  114. double measuresFee1 = (rgCost+cbrCost+fbrCost+jxCost)*csRate[0]; //措施费1
  115. double measuresFee2 = rgCost*csRate[1]; //措施费2
  116. double fees = rgCost*gfRate[1]*1.12+rgCost*gfRate[0]; //规费
  117. double tax = (originalTotalCost+measuresFee1+measuresFee2+fees+otherFee)*0.09; //税金
  118. double totalfee = originalTotalCost+measuresFee1+measuresFee2+fees+otherFee+tax-originalFbrCost; //合计
  119. jkxlData.setOriginalTotalCost(originalTotalCost);
  120. jkxlData.setOriginalRgCost(originalRgCost);
  121. jkxlData.setRgCost(rgCost);
  122. jkxlData.setOriginalCbrCost(originalCbrCost);
  123. jkxlData.setCbrCost(cbrCost);
  124. jkxlData.setOriginalFbrCost(originalFbrCost);
  125. jkxlData.setFbrCost(fbrCost);
  126. jkxlData.setOriginalJxCost(originalJxrCost);
  127. jkxlData.setJxCost(jxCost);
  128. jkxlData.setMeasuresFee1(measuresFee1);
  129. jkxlData.setMeasuresFee2(measuresFee2);
  130. jkxlData.setFees(fees);
  131. jkxlData.setOtherCost(otherFee);
  132. jkxlData.setTax(tax);
  133. jkxlData.setTotalFee(totalfee);
  134. jkxlData.setWbsCode(BashInfo.ids[i]);
  135. jkxlData.setId(id);
  136. list.add(jkxlData);
  137. }
  138. JkxlData jkxlData1 = new JkxlData();
  139. JkxlData jkxlData2 = new JkxlData();
  140. jkxlData1.setWbsCode("34120000");
  141. jkxlData1.setTotalFee(qtFees[0]);
  142. jkxlData2.setWbsCode("34220000");
  143. jkxlData2.setTotalFee(qtFees[1]);
  144. list.add(jkxlData1);
  145. list.add(jkxlData2);
  146. return list;
  147. }
  148. /**
  149. *获取措施费率
  150. */
  151. public double[] getCsRate(ImportExcel importExcel){
  152. int lastRow = importExcel.getLastDataRowNum();
  153. double lsRate = 0.00;
  154. double aqRate = 0.00;
  155. double totalRate = 0.00;
  156. for(int i=2;i<lastRow;i++){
  157. String type = importExcel.getValue(i+1,1);
  158. if(type.equals(BashInfo.CS_LS)){
  159. lsRate = importExcel.getDouble(i+1,3);
  160. }
  161. if(type.equals(BashInfo.CS_AQWM)){
  162. aqRate = importExcel.getDouble(i+1,3);
  163. }
  164. totalRate += importExcel.getDouble(i+1,3);
  165. }
  166. double[] rate = new double[2];
  167. rate[0] = (lsRate+aqRate)/100;
  168. rate[1] = (totalRate-lsRate-aqRate)/100;
  169. return rate;
  170. }
  171. /**
  172. *获取规费率
  173. */
  174. public double[] getGfRate(ImportExcel importExcel) {
  175. int lastRow = importExcel.getLastDataRowNum();
  176. double totalRate = 0.00;
  177. double wxzyRate = 0.00;
  178. for (int i = 2; i < lastRow; i++) {
  179. String type = importExcel.getValue(i + 1, 1);
  180. if (type.equals(BashInfo.GF_WXZY)) {
  181. wxzyRate = importExcel.getDouble(i + 1, 3);
  182. }
  183. if (!importExcel.getValue(i + 1, 2).equals("")) {
  184. totalRate += importExcel.getDouble(i + 1, 3);
  185. }
  186. }
  187. double[] rate = new double[2];
  188. rate[0] = wxzyRate / 100;
  189. rate[1] = (totalRate - wxzyRate) / 100;
  190. return rate;
  191. }
  192. /**
  193. * 获取其他费用
  194. */
  195. public double[] getQtFees(ImportExcel importExcel) {
  196. int lastRow = importExcel.getLastDataRowNum();
  197. double cdFree = 0.00;
  198. double zbFree = 0.00;
  199. double totalFree = 0.00;
  200. for(int i=2;i<lastRow;i++){
  201. String type = importExcel.getValue(i+1,1);
  202. String type1 = importExcel.getValue(i+1,0);
  203. if(type.equals(BashInfo.QT_SGCDZY)){
  204. cdFree = importExcel.getDouble(i+1,2);
  205. }
  206. if(type.equals(BashInfo.QT_ZBDL)){
  207. zbFree = importExcel.getDouble(i+1,2);
  208. }
  209. if(type1.equals(BashInfo.QT_HJ)){
  210. totalFree = importExcel.getDouble(i+1,2);
  211. }
  212. }
  213. double[] rate = new double[3];
  214. rate[0] = cdFree;
  215. rate[1] = zbFree;
  216. rate[2] = totalFree-cdFree-zbFree;
  217. return rate;
  218. }
  219. /**
  220. * 获取调差系数
  221. * @return
  222. */
  223. public double[] getRate(){
  224. double[] rate = new double[3];
  225. rate[0] = jkxlService.getValueByName(BashInfo.RATIO_RGTC).getValue();
  226. rate[1] = jkxlService.getValueByName(BashInfo.RATIO_CLTC).getValue();
  227. rate[2] = jkxlService.getValueByName(BashInfo.RATIO_JXTC).getValue();
  228. return rate;
  229. }
  230. /**
  231. * 获取补增值税税率调整差额和扣减甲供材超供材料费
  232. */
  233. public double getFees(ImportExcel importExcel){
  234. int lastRow = importExcel.getLastDataRowNum();
  235. double bzFree = 0.00;
  236. double kcFree = 0.00;
  237. for(int i=0;i<lastRow;i++){
  238. String type = importExcel.getValue(i+1,1);
  239. if(type.equals(BashInfo.BZZSSL)){
  240. bzFree = importExcel.getDouble(i+1,2);
  241. continue;
  242. }
  243. if(type.equals(BashInfo.KJJGCC)){
  244. kcFree = importExcel.getDouble(i+1,2);
  245. break;
  246. }
  247. }
  248. return bzFree+kcFree;
  249. }
  250. public String getId() {
  251. SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
  252. String newDate=sdf.format(new Date());
  253. String result="";
  254. Random random=new Random();
  255. for(int i=0;i<3;i++){
  256. result+=random.nextInt(10);
  257. }
  258. return newDate+result;
  259. }
  260. }