CalcLbStatuAnalyServiceImpl.java 13.5 KB
package com.bsth.service.calc.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bsth.entity.calc.CalcLbStatuAnaly;
import com.bsth.repository.calc.CalcLbStatuAnalyRepository;
import com.bsth.service.LineService;
import com.bsth.service.calc.CalcLbStatuAnalyService;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.util.Arith;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

/**
 * Created by 19/03/18.
 */
@Service
public class CalcLbStatuAnalyServiceImpl extends BaseServiceImpl<CalcLbStatuAnaly, Integer> implements CalcLbStatuAnalyService {
	
	@Autowired
	private CalcLbStatuAnalyRepository calcRepository;
	
	@Autowired
	private LineService lineService;

	@Autowired
	JdbcTemplate jdbcTemplate;


	Logger logger = LoggerFactory.getLogger(this.getClass());


	@Override
	public List<Map<String, Object>> lbStatuAnaly(String gsdm, String fgsdm,
			String line, String date, String date2, String sfyy, String type) {
		// TODO Auto-generated method stub
		List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
		List<CalcLbStatuAnaly> query = calcRepository.selectByDateAndLine(line, date, date2, gsdm, fgsdm);
		Map<String, Boolean> lineNature = lineService.lineNature();
		Map<String, List<CalcLbStatuAnaly>> keyMap = new HashMap<String, List<CalcLbStatuAnaly>>();
		List<String> keyList = new ArrayList<String>();

		String[] Date1 = date.split("-");
		String[] Date2 = date2.split("-");
		String Date = "";
		if(date.equals(date2))
			Date = Date1[0] + "年" + Date1[1] + "月" + Date1[2] + "日";
		else
			Date = Date1[0] + "年" + Date1[1] + "月" + Date1[2] + "日 - "
				 + Date2[0] + "年" + Date2[1] + "月" + Date2[2] + "日";
		
		for(CalcLbStatuAnaly lb : query){
			String xlBm = lb.getXl();
			if(lineNature.containsKey(xlBm) && lineNature.get(xlBm) != null){
				if(sfyy.equals("1") && !lineNature.get(xlBm)){
					continue;
				} else if(sfyy.equals("2") && lineNature.get(xlBm)){
					continue;
				}
			} else if(sfyy.equals("2")){
				continue;
			}
			
			String key = lb.getGsdm() + "/" + lb.getFgsdm() + "/" + lb.getXl();
			
			if(!keyMap.containsKey(key)){
				keyMap.put(key, new ArrayList<CalcLbStatuAnaly>());
				keyList.add(key);
			}
			keyMap.get(key).add(lb);
		}
		
		Collections.sort(keyList, new Comparator<String>() {
			 
			public int compare(String o1, String o2) {

				Long a = 0l;
				Long b = 0l;
				String[] split1 = o1.split("/");
				String[] split2 = o2.split("/");
				char[] charArray1 = split1[2].toCharArray();
				char[] charArray2 = split2[2].toCharArray();
				for(int i = 0; i < charArray1.length; i++){
					long temp = 1l;
					for(int j = 0; j < i; j++)
						temp *= 10;
					a += (long)charArray1[charArray1.length - 1 - i] * temp;
				}
				for(int i = 0; i < charArray2.length; i++){
					long temp = 1l;
					for(int j = 0; j < i; j++)
						temp *= 10;
					b += (long)charArray2[charArray2.length - 1 - i] * temp;
				}
 
				return a.compareTo(b);
			}
		});
		Collections.sort(keyList, new Comparator<String>() {
			 
			public int compare(String o1, String o2) {

				Long a = 0l;
				Long b = 0l;
				String[] split1 = o1.split("/");
				String[] split2 = o2.split("/");
				char[] charArray1 = split1[1].toCharArray();
				char[] charArray2 = split2[1].toCharArray();
				for(int i = 0; i < charArray1.length; i++){
					long temp = 1l;
					for(int j = 0; j < i; j++)
						temp *= 10;
					a += (long)charArray1[charArray1.length - 1 - i] * temp;
				}
				for(int i = 0; i < charArray2.length; i++){
					long temp = 1l;
					for(int j = 0; j < i; j++)
						temp *= 10;
					b += (long)charArray2[charArray2.length - 1 - i] * temp;
				}

				return a.compareTo(b);
			}
		});

		String company = "", subCompany = "", lineName = "";
		Map<String, Object> lastMap = new HashMap<String, Object>();
		lastMap.put("line", "$$$$$${txt-3916}");
		for(String key : keyList){
			List<CalcLbStatuAnaly> list = keyMap.get(key);
			Map<String, Object> m = new HashMap<String, Object>();
			company = "";
			subCompany = "";
			lineName = "";
			for(CalcLbStatuAnaly lb : list){
				if(lb.getGsname() != null && company.trim().length() == 0)
					company = lb.getGsname();
				if(lb.getFgsname() != null && subCompany.trim().length() == 0)
					subCompany = lb.getFgsname();
				if(lb.getXlName() != null && lineName.trim().length() == 0)
					lineName = lb.getXlName();
				m.put("jhbc", Arith.add(m.get("jhbc")!=null?m.get("jhbc"):"0", lb.getJhbc()));
				m.put("sjbc", Arith.add(m.get("sjbc")!=null?m.get("sjbc"):"0", lb.getSjbc()));
				m.put("jhlc", Arith.add(m.get("jhlc")!=null?m.get("jhlc"):"0", lb.getJhlc()!=null?lb.getJhlc():"0"));
				m.put("sjlc", Arith.add(m.get("sjlc")!=null?m.get("sjlc"):"0", lb.getSjlc()!=null?lb.getSjlc():"0"));
				m.put("lzbc", Arith.add(m.get("lzbc")!=null?m.get("lzbc"):"0", lb.getLzbc()));
				m.put("lzlc", Arith.add(m.get("lzlc")!=null?m.get("lzlc"):"0", lb.getLzlc()!=null?lb.getLzlc():"0"));
				m.put("dmbc", Arith.add(m.get("dmbc")!=null?m.get("dmbc"):"0", lb.getDmbc()));
				m.put("dmlc", Arith.add(m.get("dmlc")!=null?m.get("dmlc"):"0", lb.getDmlc()!=null?lb.getDmlc():"0"));
				m.put("gzbc", Arith.add(m.get("gzbc")!=null?m.get("gzbc"):"0", lb.getGzbc()));
				m.put("gzlc", Arith.add(m.get("gzlc")!=null?m.get("gzlc"):"0", lb.getGzlc()!=null?lb.getGzlc():"0"));
				m.put("jfbc", Arith.add(m.get("jfbc")!=null?m.get("jfbc"):"0", lb.getJfbc()));
				m.put("jflc", Arith.add(m.get("jflc")!=null?m.get("jflc"):"0", lb.getJflc()!=null?lb.getJflc():"0"));
				m.put("zsbc", Arith.add(m.get("zsbc")!=null?m.get("zsbc"):"0", lb.getZsbc()));
				m.put("zslc", Arith.add(m.get("zslc")!=null?m.get("zslc"):"0", lb.getZslc()!=null?lb.getZslc():"0"));
				m.put("qrbc", Arith.add(m.get("qrbc")!=null?m.get("qrbc"):"0", lb.getQrbc()));
				m.put("qrlc", Arith.add(m.get("qrlc")!=null?m.get("qrlc"):"0", lb.getQrlc()!=null?lb.getQrlc():"0"));
				m.put("qcbc", Arith.add(m.get("qcbc")!=null?m.get("qcbc"):"0", lb.getQcbc()));
				m.put("qclc", Arith.add(m.get("qclc")!=null?m.get("qclc"):"0", lb.getQclc()!=null?lb.getQclc():"0"));
				m.put("kxbc", Arith.add(m.get("kxbc")!=null?m.get("kxbc"):"0", lb.getKxbc()));
				m.put("kxlc", Arith.add(m.get("kxlc")!=null?m.get("kxlc"):"0", lb.getKxlc()!=null?lb.getKxlc():"0"));
				m.put("qhbc", Arith.add(m.get("qhbc")!=null?m.get("qhbc"):"0", lb.getQhbc()));
				m.put("qhlc", Arith.add(m.get("qhlc")!=null?m.get("qhlc"):"0", lb.getQhlc()!=null?lb.getQhlc():"0"));
				m.put("ywbc", Arith.add(m.get("ywbc")!=null?m.get("ywbc"):"0", lb.getYwbc()));
				m.put("ywlc", Arith.add(m.get("ywlc")!=null?m.get("ywlc"):"0", lb.getYwlc()!=null?lb.getYwlc():"0"));
				m.put("qtbc", Arith.add(m.get("qtbc")!=null?m.get("qtbc"):"0", lb.getQtbc()));
				m.put("qtlc", Arith.add(m.get("qtlc")!=null?m.get("qtlc"):"0", lb.getQtlc()!=null?lb.getQtlc():"0"));
			}
			m.put("date", Date);
			m.put("company", company);
			m.put("subCompany", subCompany);
			m.put("line", lineName);
			resList.add(m);
			
			lastMap.put("jhbc", Arith.add(m.get("jhbc")!=null?m.get("jhbc"):"0", lastMap.get("jhbc")!=null?lastMap.get("jhbc"):"0"));
			lastMap.put("sjbc", Arith.add(m.get("sjbc")!=null?m.get("sjbc"):"0", lastMap.get("sjbc")!=null?lastMap.get("sjbc"):"0"));
			lastMap.put("jhlc", Arith.add(m.get("jhlc")!=null?m.get("jhlc"):"0", lastMap.get("jhlc")!=null?lastMap.get("jhlc"):"0"));
			lastMap.put("sjlc", Arith.add(m.get("sjlc")!=null?m.get("sjlc"):"0", lastMap.get("sjlc")!=null?lastMap.get("sjlc"):"0"));
			lastMap.put("lzbc", Arith.add(m.get("lzbc")!=null?m.get("lzbc"):"0", lastMap.get("lzbc")!=null?lastMap.get("lzbc"):"0"));
			lastMap.put("lzlc", Arith.add(m.get("lzlc")!=null?m.get("lzlc"):"0", lastMap.get("lzlc")!=null?lastMap.get("lzlc"):"0"));
			lastMap.put("dmbc", Arith.add(m.get("dmbc")!=null?m.get("dmbc"):"0", lastMap.get("dmbc")!=null?lastMap.get("dmbc"):"0"));
			lastMap.put("dmlc", Arith.add(m.get("dmlc")!=null?m.get("dmlc"):"0", lastMap.get("dmlc")!=null?lastMap.get("dmlc"):"0"));
			lastMap.put("gzbc", Arith.add(m.get("gzbc")!=null?m.get("gzbc"):"0", lastMap.get("gzbc")!=null?lastMap.get("gzbc"):"0"));
			lastMap.put("gzlc", Arith.add(m.get("gzlc")!=null?m.get("gzlc"):"0", lastMap.get("gzlc")!=null?lastMap.get("gzlc"):"0"));
			lastMap.put("jfbc", Arith.add(m.get("jfbc")!=null?m.get("jfbc"):"0", lastMap.get("jfbc")!=null?lastMap.get("jfbc"):"0"));
			lastMap.put("jflc", Arith.add(m.get("jflc")!=null?m.get("jflc"):"0", lastMap.get("jflc")!=null?lastMap.get("jflc"):"0"));
			lastMap.put("zsbc", Arith.add(m.get("zsbc")!=null?m.get("zsbc"):"0", lastMap.get("zsbc")!=null?lastMap.get("zsbc"):"0"));
			lastMap.put("zslc", Arith.add(m.get("zslc")!=null?m.get("zslc"):"0", lastMap.get("zslc")!=null?lastMap.get("zslc"):"0"));
			lastMap.put("qrbc", Arith.add(m.get("qrbc")!=null?m.get("qrbc"):"0", lastMap.get("qrbc")!=null?lastMap.get("qrbc"):"0"));
			lastMap.put("qrlc", Arith.add(m.get("qrlc")!=null?m.get("qrlc"):"0", lastMap.get("qrlc")!=null?lastMap.get("qrlc"):"0"));
			lastMap.put("qcbc", Arith.add(m.get("qcbc")!=null?m.get("qcbc"):"0", lastMap.get("qcbc")!=null?lastMap.get("qcbc"):"0"));
			lastMap.put("qclc", Arith.add(m.get("qclc")!=null?m.get("qclc"):"0", lastMap.get("qclc")!=null?lastMap.get("qclc"):"0"));
			lastMap.put("kxbc", Arith.add(m.get("kxbc")!=null?m.get("kxbc"):"0", lastMap.get("kxbc")!=null?lastMap.get("kxbc"):"0"));
			lastMap.put("kxlc", Arith.add(m.get("kxlc")!=null?m.get("kxlc"):"0", lastMap.get("kxlc")!=null?lastMap.get("kxlc"):"0"));
			lastMap.put("qhbc", Arith.add(m.get("qhbc")!=null?m.get("qhbc"):"0", lastMap.get("qhbc")!=null?lastMap.get("qhbc"):"0"));
			lastMap.put("qhlc", Arith.add(m.get("qhlc")!=null?m.get("qhlc"):"0", lastMap.get("qhlc")!=null?lastMap.get("qhlc"):"0"));
			lastMap.put("ywbc", Arith.add(m.get("ywbc")!=null?m.get("ywbc"):"0", lastMap.get("ywbc")!=null?lastMap.get("ywbc"):"0"));
			lastMap.put("ywlc", Arith.add(m.get("ywlc")!=null?m.get("ywlc"):"0", lastMap.get("ywlc")!=null?lastMap.get("ywlc"):"0"));
			lastMap.put("qtbc", Arith.add(m.get("qtbc")!=null?m.get("qtbc"):"0", lastMap.get("qtbc")!=null?lastMap.get("qtbc"):"0"));
			lastMap.put("qtlc", Arith.add(m.get("qtlc")!=null?m.get("qtlc"):"0", lastMap.get("qtlc")!=null?lastMap.get("qtlc"):"0"));
		}
		
		if(resList.size() > 0){
			resList.add(lastMap);
			for(Map<String, Object> m : resList){
				if(Arith.compareTo(m.get("sjbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("bcbfb", Arith.div(Arith.mul(m.get("sjbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("bcbfb", "0%");
				}
				if(Arith.compareTo(m.get("sjlc"), 0) == 1 && Arith.compareTo(m.get("jhlc"), 0) == 1){
					m.put("lcbfb", Arith.div(Arith.mul(m.get("sjlc"), 100), m.get("jhlc"), 2) + "%");
				} else {
					m.put("lcbfb", "0%");
				}
				if(Arith.compareTo(m.get("lzbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("lzbfb", Arith.div(Arith.mul(m.get("lzbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("lzbfb", "0%");
				}
				if(Arith.compareTo(m.get("dmbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("dmbfb", Arith.div(Arith.mul(m.get("dmbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("dmbfb", "0%");
				}
				if(Arith.compareTo(m.get("gzbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("gzbfb", Arith.div(Arith.mul(m.get("gzbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("gzbfb", "0%");
				}
				if(Arith.compareTo(m.get("jfbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("jfbfb", Arith.div(Arith.mul(m.get("jfbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("jfbfb", "0%");
				}
				if(Arith.compareTo(m.get("zsbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("zsbfb", Arith.div(Arith.mul(m.get("zsbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("zsbfb", "0%");
				}
				if(Arith.compareTo(m.get("qrbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("qrbfb", Arith.div(Arith.mul(m.get("qrbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("qrbfb", "0%");
				}
				if(Arith.compareTo(m.get("qcbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("qcbfb", Arith.div(Arith.mul(m.get("qcbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("qcbfb", "0%");
				}
				if(Arith.compareTo(m.get("kxbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("kxbfb", Arith.div(Arith.mul(m.get("kxbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("kxbfb", "0%");
				}
				if(Arith.compareTo(m.get("qhbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("qhbfb", Arith.div(Arith.mul(m.get("qhbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("qhbfb", "0%");
				}
				if(Arith.compareTo(m.get("ywbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("ywbfb", Arith.div(Arith.mul(m.get("ywbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("ywbfb", "0%");
				}
				if(Arith.compareTo(m.get("qtbc"), 0) == 1 && Arith.compareTo(m.get("jhbc"), 0) == 1){
					m.put("qtbfb", Arith.div(Arith.mul(m.get("qtbc"), 100), m.get("jhbc"), 2) + "%");
				} else {
					m.put("qtbfb", "0%");
				}
			}
		}
		
		return resList;
	}

}