package com.jeeplus.modules.sg.overheadline.service; import com.jeeplus.common.utils.excel.ImportExcel; import com.jeeplus.common.utils.sg.ExcelUtil; import com.jeeplus.modules.sg.overheadline.entity.Settlement; import com.jeeplus.modules.sg.overheadline.mapper.SettlementMapper; import com.jeeplus.modules.sg.overheadline.util.BashInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.util.*; @Service public class SettlementService { @Autowired private SettlementMapper settlementMapper; /* 添加结算工程表 */ @Transactional public void save(MultipartFile file,String id){ try { List settlementList = getSettlement(file,id); for (Settlement settlement:settlementList){ settlementMapper.sava(settlement); } }catch (Exception c){ c.printStackTrace(); } } /* 查找结算工程表 */ public List selectSettlementService(String id){ return settlementMapper.selectSettlement(id); } /* 获取结算数据 */ public List getSettlement(MultipartFile file, String id) throws Exception{ ImportExcel completion = new ImportExcel(file,1, BashInfo.SHEET_HZB);//工程项目竣工结算汇总表 ImportExcel built = new ImportExcel(file,1,BashInfo.SHEET_GCHZ);//架空线路工程汇总表 ImportExcel division = new ImportExcel(file,1,BashInfo.SHEET_FBFXJJ);//分部分项工程量清单计价表 ImportExcel wordFirst = new ImportExcel(file,1,BashInfo.SHEET_CSB);//措施项目清单计价表(一) ImportExcel otherProject = new ImportExcel(file,1,BashInfo.SHEET_QTFY);//其他项目清单计价表 ImportExcel feesProject = new ImportExcel(file,1,BashInfo.SHEET_GFQD);//规费项目清单计价表 Map builtMap = getCompletionWorks(completion); double builtTotal = ExcelUtil.getDouble(built,BashInfo.QT_HJ,0,2);//获取架空线路工程费用汇总表 分部分项 合计 double wordtotal = ExcelUtil.getDouble(wordFirst,BashInfo.QT_HJ,0,4);//获取措施费清单计价表 double otherTotal = ExcelUtil.getDouble(otherProject,BashInfo.QT_HJ,0,2);//获取其他项目费合计 int[] comlumn2 = {12,14,15}; double[] divisiontotal=ExcelUtil.getDoubleArray(division,BashInfo.PROJECTNAME,2,comlumn2);//获取分工清单 double feescount = ExcelUtil.getDouble(feesProject,BashInfo.QT_HJ,0,4);//获取规费合计 return getTotality(builtMap,builtTotal,divisiontotal,wordtotal,otherTotal,feescount,id); } /* 获取《工程项目竣工结算汇总表》匹配数据 */ public Map getCompletionWorks(ImportExcel importExcel){ Map map = new LinkedHashMap(); int lastDataRowNum = importExcel.getLastDataRowNum(); String key=""; double val=0.0; String text = ""; Object[] objects; for (int i = 2; i < lastDataRowNum; i++) { objects = new Object[2]; key = importExcel.getValue(i+1,1); val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); switch (key){ case BashInfo.JS_FBFX: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_CBRF: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_CSXM: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_QTXM: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_GF: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_SJ: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_FBRF: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_JGJS: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_BZZS: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_KJJG: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; case BashInfo.JS_GCJS: val = importExcel.getDouble(i+1,2); text=importExcel.getValue(i+1,3); objects[0] = val; objects[1] = text; map.put(key, objects); break; } } return map; } /* 结算汇总数据比对方法 */ public List getTotality(Map builtMap,double builtTotal,double[] divisiontotal,double wordtotal,double otherTotal,double feescount,String id){ List list = new ArrayList(); String key=""; double count=0.0; double countProtect=0.0; double creatProtect=0.0; String status="1"; Settlement settlement; String reason = BashInfo.JS_REASON; for (Map.Entry map:builtMap.entrySet()){ key = map.getKey(); Object[] val = map.getValue(); double money = Double.parseDouble(val[0].toString()); String remarks=val[1].toString(); switch (key){ case BashInfo.JS_FBFX: if(money==builtTotal&&money==divisiontotal[0]){ status="0"; }else { reason = BashInfo.RESON_FBFX; } count+=money; break; case BashInfo.JS_CBRF: if(money==divisiontotal[1]){ status="0"; }else { reason = BashInfo.RESON_CBRF; } count+=money; break; case BashInfo.JS_CSXM: if(money==wordtotal){ status="0"; }else { reason = BashInfo.RESON_CSXM; } count+=money; break; case BashInfo.JS_QTXM: if(money==otherTotal){ status="0"; }else { reason = BashInfo.RESON_QTXM; } count+=money; break; case BashInfo.JS_GF: if(money==feescount){ status="0"; }else { reason = BashInfo.RESON_GF; } count+=money; break; case BashInfo.JS_FBRF: if(money==divisiontotal[2]){ status="0"; }else { reason = BashInfo.RESON_FBRF; } count+=money; break; case BashInfo.JS_SJ: status="0"; count+=money; break; case BashInfo.JS_JGJS: if(money==count){ status="0"; }else { reason = BashInfo.RESON_JGJS; } countProtect+=money; break; case BashInfo.JS_BZZS: status="0"; countProtect+=money; break; case BashInfo.JS_KJJG: status="0"; creatProtect=money; break; case BashInfo.GCJS: double reduce = countProtect-creatProtect; if (money==reduce){ status="0"; }else { reason = BashInfo.RESON_GCJS; } break; } settlement = new Settlement(); settlement.setId(id); settlement.setEntryName(key); settlement.setMoney(money); settlement.setStatus(status); settlement.setRemarks(remarks); settlement.setReason(reason); list.add(settlement); status="1"; reason = BashInfo.JS_REASON; } return list; } }