JkxlController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. package com.jeeplus.modules.sg.web;
  2. import com.jeeplus.common.utils.DateUtils;
  3. import com.jeeplus.common.utils.StringUtils;
  4. import com.jeeplus.common.utils.excel.ExportExcel;
  5. import com.jeeplus.common.utils.excel.ImportExcel;
  6. import com.jeeplus.core.web.BaseController;
  7. import com.jeeplus.modules.sg.entity.JkxlData;
  8. import com.jeeplus.modules.sg.entity.TzData;
  9. import com.jeeplus.modules.sg.entity.WbsProject;
  10. import com.jeeplus.modules.sg.service.JkxlService;
  11. import com.jeeplus.modules.sg.util.BashInfo;
  12. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.ui.Model;
  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. @RequestMapping("/import")
  39. public String importFile(MultipartFile file, RedirectAttributes redirectAttributes, HttpServletRequest request, Model model){
  40. double sl = Double.valueOf(request.getParameter("jxsl"));
  41. String projectName = request.getParameter("name");
  42. String id = getId();
  43. try {
  44. double[] rate = getRate();
  45. WbsProject wbsProject = new WbsProject();
  46. wbsProject.setId(id);
  47. wbsProject.setName(projectName);
  48. wbsProject.setCreateDate(new Date());
  49. jkxlService.saveProject(wbsProject);
  50. List<JkxlData> list = getData(file,rate,id,sl);
  51. for(JkxlData jkxlData : list){
  52. jkxlService.save(jkxlData);
  53. }
  54. double[] tzfee = getTzFee(file);
  55. jkxlService.saveTzFee(tzfee,id);
  56. } catch (Exception e){
  57. addMessage(redirectAttributes, "导入失败");
  58. }
  59. addMessage(redirectAttributes, "导入成功");
  60. return "redirect:/a/jkxl/list?id="+id;
  61. }
  62. @RequestMapping("/gettz")
  63. @ResponseBody
  64. public List<JkxlData> getTz(TzData tzData){
  65. String id = tzData.getId();
  66. List<JkxlData> list = jkxlService.getList(id);
  67. List<JkxlData> list1 = new ArrayList<>();
  68. for(JkxlData jkxlData: list){
  69. if(jkxlData.getOriginalTotalCost() != null){
  70. list1.add(jkxlData);
  71. }
  72. }
  73. return list1;
  74. }
  75. // @RequestMapping("/relist")
  76. // public String reList(){
  77. //
  78. // }
  79. @RequestMapping("/list")
  80. public String list(HttpServletRequest request,Model model){
  81. String id = request.getParameter("id");
  82. JkxlData jkxlData = new JkxlData();
  83. TzData tzData = new TzData();
  84. jkxlData.setId(id);
  85. tzData.setId(id);
  86. List<JkxlData> list1 = new ArrayList<>();
  87. list1.add(jkxlData);
  88. List<JkxlData> list = jkxlService.getList(id);
  89. List<TzData> list2 = jkxlService.getTzFee(tzData);
  90. HashMap map = new HashMap();
  91. map.put("list1",list1);
  92. map.put("list",list);
  93. map.put("list2",list2);
  94. model.addAttribute("map",map);
  95. return "modules/sg/free/wbslist";
  96. }
  97. @RequestMapping("/export")
  98. public String export(HttpServletRequest request, HttpServletResponse response,Model model,RedirectAttributes redirectAttributes) {
  99. String id = request.getParameter("id");
  100. try{
  101. String fileName = "架空线路"+ DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
  102. List<JkxlData> list = jkxlService.findList(id);
  103. new ExportExcel(null,JkxlData.class).setDataList(list).write(response, fileName).dispose();
  104. return null;
  105. }catch (Exception e){
  106. addMessage(redirectAttributes, "导出失败");
  107. }
  108. addMessage(redirectAttributes, "导出成功");
  109. return "redirect:/a/jkxl/list?id="+id;
  110. }
  111. public List<JkxlData> getData(MultipartFile file,double[] rate,String id,double sl) throws IOException, InvalidFormatException {
  112. ImportExcel importExcel = new ImportExcel(file,1,BashInfo.SHEET_FBFXJJ);
  113. ImportExcel csqd = new ImportExcel(file,1,BashInfo.SHEET_CSB);
  114. ImportExcel gf = new ImportExcel(file,1,BashInfo.SHEET_GFQD);
  115. ImportExcel qt = new ImportExcel(file,1,BashInfo.SHEET_QTFY);
  116. ImportExcel total = new ImportExcel(file,1,BashInfo.SHEET_HZB );
  117. double[] csRate = getCsRate(csqd);
  118. double[] gfRate = getGfRate(gf);
  119. double[] qtFees = getQtFees(qt);
  120. double[] wsbFees = getFees(total);
  121. double totalFee = 0.00;
  122. List<JkxlData> list = new ArrayList<>();
  123. int lastRow = importExcel.getLastDataRowNum();
  124. int[] row = new int[6];
  125. for(int i=0;i<lastRow;i++){
  126. String type = importExcel.getValue(i+1,2);
  127. if(type.equals(BashInfo.PROJECTNAME)){
  128. totalFee = importExcel.getDouble(i+1,12);
  129. continue;
  130. }
  131. if(type.equals(BashInfo.JCGC)){
  132. row[0] = i+1;
  133. continue;
  134. }
  135. if(type.equals(BashInfo.GTGC)){
  136. row[1] = i+1;
  137. continue;
  138. }
  139. if(type.equals(BashInfo.JDGC)){
  140. row[2] = i+1;
  141. continue;
  142. }
  143. if(type.equals(BashInfo.JXGC)){
  144. row[3] = i+1;
  145. continue;
  146. }
  147. if(type.equals(BashInfo.FJAZGC)){
  148. row[4] = i+1;
  149. continue;
  150. }
  151. if(type.equals(BashInfo.FZGC)){
  152. row[5] = i+1;
  153. break;
  154. }
  155. }
  156. for(int i=0;i<6;i++){
  157. JkxlData jkxlData = new JkxlData();
  158. double originalTotalCost = importExcel.getDouble(row[i],12); //原合计
  159. double otherRate = originalTotalCost/totalFee; //其他费用分摊比例
  160. double orRate = new BigDecimal(otherRate).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); //四舍五入
  161. double btc = wsbFees[0]*orRate; //补调差额
  162. double jcl = wsbFees[1]*orRate; //减材料费
  163. double otherFee = qtFees[2]*otherRate; //其他费用
  164. double originalRgCost = importExcel.getDouble(row[i],13); //原人工费
  165. double rgCost = originalRgCost/(1+rate[0]); //后人工费
  166. double originalCbrCost = importExcel.getDouble(row[i],14); //原承包人采购
  167. double cbrCost = originalCbrCost/(1+rate[1]); //后承包人采购
  168. double originalFbrCost = importExcel.getDouble(row[i],15); //原发包人采购
  169. double fbrCost = originalFbrCost/(1+sl); //后发包人采购
  170. double originalJxrCost = importExcel.getDouble(row[i],17); //原机械费
  171. double jxCost = originalJxrCost/(1+rate[2]); //后机械费
  172. double measuresFee1 = (rgCost+cbrCost+fbrCost+jxCost)*csRate[0]; //措施费1
  173. double measuresFee2 = rgCost*csRate[1]; //措施费2
  174. double fees = rgCost*gfRate[1]*1.12+rgCost*gfRate[0]; //规费
  175. double tax = (originalTotalCost+measuresFee1+measuresFee2+fees+otherFee)*0.09; //税金
  176. double totalfee = originalTotalCost+measuresFee1+measuresFee2+fees+otherFee+tax-originalFbrCost; //合计
  177. jkxlData.setOriginalTotalCost(originalTotalCost);
  178. jkxlData.setOriginalRate(orRate);
  179. jkxlData.setOriginalRgCost(originalRgCost);
  180. jkxlData.setRgCost(rgCost);
  181. jkxlData.setOriginalCbrCost(originalCbrCost);
  182. jkxlData.setCbrCost(cbrCost);
  183. jkxlData.setOriginalFbrCost(originalFbrCost);
  184. jkxlData.setFbrCost(fbrCost);
  185. jkxlData.setOriginalJxCost(originalJxrCost);
  186. jkxlData.setJxCost(jxCost);
  187. jkxlData.setMeasuresFee1(measuresFee1);
  188. jkxlData.setMeasuresFee2(measuresFee2);
  189. jkxlData.setFees(fees);
  190. jkxlData.setOtherCost(otherFee);
  191. jkxlData.setTex(tax);
  192. jkxlData.setTotalFee(totalfee);
  193. jkxlData.setBzFee(btc);
  194. jkxlData.setJkFee(jcl);
  195. jkxlData.setWbsCode(BashInfo.ids[i]);
  196. jkxlData.setId(id);
  197. list.add(jkxlData);
  198. }
  199. JkxlData jkxlData1 = new JkxlData();
  200. JkxlData jkxlData2 = new JkxlData();
  201. jkxlData1.setId(id);
  202. jkxlData1.setWbsCode("34120000");
  203. jkxlData1.setTotalFee(qtFees[0]);
  204. jkxlData2.setWbsCode("34220000");
  205. jkxlData2.setTotalFee(qtFees[1]);
  206. jkxlData2.setId(id);
  207. list.add(jkxlData1);
  208. list.add(jkxlData2);
  209. return list;
  210. }
  211. /**
  212. *获取措施费率
  213. */
  214. public double[] getCsRate(ImportExcel importExcel){
  215. int lastRow = importExcel.getLastDataRowNum();
  216. double lsRate = 0.00;
  217. double aqRate = 0.00;
  218. double totalRate = 0.00;
  219. for(int i=2;i<lastRow;i++){
  220. String type = importExcel.getValue(i+1,1);
  221. if(type.equals(BashInfo.CS_LS)){
  222. lsRate = importExcel.getDouble(i+1,3);
  223. }
  224. if(type.equals(BashInfo.CS_AQWM)){
  225. aqRate = importExcel.getDouble(i+1,3);
  226. }
  227. totalRate += importExcel.getDouble(i+1,3);
  228. }
  229. double[] rate = new double[2];
  230. rate[0] = (lsRate+aqRate)/100;
  231. rate[1] = (totalRate-lsRate-aqRate)/100;
  232. return rate;
  233. }
  234. /**
  235. *获取规费率
  236. */
  237. public double[] getGfRate(ImportExcel importExcel) {
  238. int lastRow = importExcel.getLastDataRowNum();
  239. double totalRate = 0.00;
  240. double wxzyRate = 0.00;
  241. for (int i = 2; i < lastRow; i++) {
  242. String type = importExcel.getValue(i + 1, 1);
  243. if (type.equals(BashInfo.GF_WXZY)) {
  244. wxzyRate = importExcel.getDouble(i + 1, 3);
  245. }
  246. if (!importExcel.getValue(i + 1, 2).equals("")) {
  247. totalRate += importExcel.getDouble(i + 1, 3);
  248. }
  249. }
  250. double[] rate = new double[2];
  251. rate[0] = wxzyRate / 100;
  252. rate[1] = (totalRate - wxzyRate) / 100;
  253. return rate;
  254. }
  255. /**
  256. * 获取其他费用
  257. */
  258. public double[] getQtFees(ImportExcel importExcel) {
  259. int lastRow = importExcel.getLastDataRowNum();
  260. double cdFree = 0.00;
  261. double zbFree = 0.00;
  262. double totalFree = 0.00;
  263. for(int i=2;i<lastRow;i++){
  264. String type = importExcel.getValue(i+1,1);
  265. String type1 = importExcel.getValue(i+1,0);
  266. if(type.equals(BashInfo.QT_SGCDZY)){
  267. cdFree = importExcel.getDouble(i+1,2);
  268. }
  269. if(type.equals(BashInfo.QT_ZBDL)){
  270. zbFree = importExcel.getDouble(i+1,2);
  271. }
  272. if(type1.equals(BashInfo.QT_HJ)){
  273. totalFree = importExcel.getDouble(i+1,2);
  274. }
  275. }
  276. double[] rate = new double[3];
  277. rate[0] = cdFree;
  278. rate[1] = zbFree;
  279. rate[2] = totalFree-cdFree-zbFree;
  280. return rate;
  281. }
  282. /**
  283. * 获取调差系数
  284. * @return
  285. */
  286. public double[] getRate(){
  287. double[] rate = new double[3];
  288. rate[0] = jkxlService.getValueByName(BashInfo.RATIO_RGTC).getValue()/100;
  289. rate[1] = jkxlService.getValueByName(BashInfo.RATIO_CLTC).getValue()/100;
  290. rate[2] = jkxlService.getValueByName(BashInfo.RATIO_JXTC).getValue()/100;
  291. return rate;
  292. }
  293. /**
  294. * 获取补增值税税率调整差额和扣减甲供材超供材料费
  295. */
  296. public double[] getFees(ImportExcel importExcel){
  297. int lastRow = importExcel.getLastDataRowNum();
  298. double bzFree = 0.00;
  299. double kcFree = 0.00;
  300. for(int i=0;i<lastRow;i++){
  301. String type = importExcel.getValue(i+1,1);
  302. if(type.equals(BashInfo.BZZSSL)){
  303. bzFree = importExcel.getDouble(i+1,2);
  304. continue;
  305. }
  306. if(type.equals(BashInfo.KJJGCC)){
  307. kcFree = importExcel.getDouble(i+1,2);
  308. break;
  309. }
  310. }
  311. double[] wsb = new double[2];
  312. wsb[0] = bzFree;
  313. wsb[1] = kcFree;
  314. return wsb;
  315. }
  316. public double[] getTzFee(MultipartFile file) throws IOException, InvalidFormatException {
  317. ImportExcel total = new ImportExcel(file,1,BashInfo.SHEET_HZB );
  318. double[] wsb = getFees(total);
  319. return wsb;
  320. }
  321. public String getId() {
  322. SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
  323. String newDate=sdf.format(new Date());
  324. String result="";
  325. Random random=new Random();
  326. for(int i=0;i<3;i++){
  327. result+=random.nextInt(10);
  328. }
  329. return newDate+result;
  330. }
  331. }