|
|
@@ -14,11 +14,13 @@ import com.lc.ibps.common.api.IDictionaryService;
|
|
|
import com.lc.ibps.common.cat.persistence.entity.DictionaryPo;
|
|
|
import com.lc.ibps.org.api.IPartyPositionService;
|
|
|
import com.lc.ibps.org.party.persistence.entity.PartyPositionPo;
|
|
|
+import org.apache.poi.ss.formula.functions.T;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.DayOfWeek;
|
|
|
@@ -146,6 +148,192 @@ public class StatisticServiceImpl implements StatisticService {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<EquipmentDashBoardDTO> getEquipmentDashBoard() {
|
|
|
+ List<EquipmentDashBoardDTO> list = new ArrayList<>();
|
|
|
+ EquipmentDashBoardDTO equipDTO = new EquipmentDashBoardDTO();
|
|
|
+
|
|
|
+ String sql = "SELECT count(*) as total from t_sbdj WHERE di_dian_='%s'";
|
|
|
+ int total = Integer.parseInt(commonDao.queryOne(String.format(sql,getDiDian())).get("total").toString());
|
|
|
+
|
|
|
+ // 检验科各个类型设备分布情况
|
|
|
+ equipDTO.setDistributionDataObj(getEquipType(total));
|
|
|
+
|
|
|
+ // 各组设备总数分布情况
|
|
|
+ equipDTO.setNumDistributionDataObj(getEquipByPosition(total));
|
|
|
+
|
|
|
+ // 部门设备寿命情况统计
|
|
|
+ equipDTO.setLifeTimeData(getEquipServiceLife());
|
|
|
+
|
|
|
+ // 设备调整情况
|
|
|
+
|
|
|
+ // 各部门设备完好情况
|
|
|
+
|
|
|
+ // 各部门设备维护完成情况
|
|
|
+
|
|
|
+ // 各部门设备检定/校准完成情况
|
|
|
+
|
|
|
+ // 检验科设备停用/报废列表
|
|
|
+
|
|
|
+ list.add(equipDTO);
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<EquipServiceLifeDTO> getEquipServiceLife(){
|
|
|
+ Set<String> existsDept = new HashSet<>();
|
|
|
+ List<EquipServiceLifeDTO> lifeDTOList = new ArrayList<>();
|
|
|
+ String sql = "SELECT p.name_,q.bian_zhi_bu_men_,COUNT(bian_zhi_bu_men_)as value from ( " +
|
|
|
+ " SELECT bian_zhi_bu_men_ FROM t_sbdj WHERE %s and di_dian_='%s') q, " +
|
|
|
+ " (SELECT name_,id_ from ibps_party_entity WHERE path_ like '%%%s%%' and DEPTH_>=3) p " +
|
|
|
+ " where q.bian_zhi_bu_men_=p.id_ GROUP BY q.bian_zhi_bu_men_";
|
|
|
+
|
|
|
+ String conditions = "TIMESTAMPDIFF(YEAR, chu_chang_ri_qi_, CURDATE())<1";
|
|
|
+ List<Map<String, Object>> listO = (List<Map<String, Object>>) commonDao.query(String.format(sql,conditions,getDiDian(),getDiDian()));
|
|
|
+ getLife(listO,lifeDTOList,existsDept,"O");
|
|
|
+
|
|
|
+ conditions = "TIMESTAMPDIFF(YEAR, chu_chang_ri_qi_, CURDATE())>=1 and TIMESTAMPDIFF(YEAR, chu_chang_ri_qi_, CURDATE())<3";
|
|
|
+ List<Map<String, Object>> listOT = (List<Map<String, Object>>) commonDao.query(String.format(sql,conditions,getDiDian(),getDiDian()));
|
|
|
+ getLife(listOT,lifeDTOList,existsDept,"OF");
|
|
|
+
|
|
|
+ conditions = "TIMESTAMPDIFF(YEAR, chu_chang_ri_qi_, CURDATE())>=3 and TIMESTAMPDIFF(YEAR, chu_chang_ri_qi_, CURDATE())<5";
|
|
|
+ List<Map<String, Object>> listTF = (List<Map<String, Object>>) commonDao.query(String.format(sql,conditions,getDiDian(),getDiDian()));
|
|
|
+ getLife(listTF,lifeDTOList,existsDept,"TF");
|
|
|
+
|
|
|
+ conditions = "TIMESTAMPDIFF(YEAR, chu_chang_ri_qi_, CURDATE())>=5";
|
|
|
+ List<Map<String, Object>> listF = (List<Map<String, Object>>) commonDao.query(String.format(sql,conditions,getDiDian(),getDiDian()));
|
|
|
+ getLife(listF,lifeDTOList,existsDept,"F");
|
|
|
+
|
|
|
+ Map<String, EquipServiceLifeDTO> mergedDTOMap = new HashMap<>();
|
|
|
+ for (EquipServiceLifeDTO dto : lifeDTOList) {
|
|
|
+ if (!mergedDTOMap.containsKey(dto.getOrg())) {
|
|
|
+ mergedDTOMap.put(dto.getOrg(), dto);
|
|
|
+ } else {
|
|
|
+ EquipServiceLifeDTO mergedDTO = mergedDTOMap.get(dto.getOrg());
|
|
|
+ mergedDTO.setNumO(mergedDTO.getNumO() + dto.getNumO());
|
|
|
+ mergedDTO.setNumOT(mergedDTO.getNumOT() + dto.getNumOT());
|
|
|
+ mergedDTO.setNumTF(mergedDTO.getNumTF() + dto.getNumTF());
|
|
|
+ mergedDTO.setNumF(mergedDTO.getNumF() + dto.getNumF());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<EquipServiceLifeDTO> mergedList = new ArrayList<>(mergedDTOMap.values());
|
|
|
+
|
|
|
+ List<EquipServiceLifeDTO> finalList = new ArrayList<>(mergedList);
|
|
|
+ List<Map<String, Object>> deptList = getPositionBy34(getDiDian());
|
|
|
+ for (Map<String, Object> dept : deptList) {
|
|
|
+ if (!existsDept.contains(dept.get("name_"))) {
|
|
|
+ EquipServiceLifeDTO lifeDTO = new EquipServiceLifeDTO();
|
|
|
+ lifeDTO.setOrg(dept.get("name_").toString());
|
|
|
+ lifeDTO.setNumO(0);
|
|
|
+ lifeDTO.setNumOT(0);
|
|
|
+ lifeDTO.setNumTF(0);
|
|
|
+ lifeDTO.setNumF(0);
|
|
|
+ finalList.add(lifeDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return finalList;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void getLife(List<Map<String, Object>> list,List<EquipServiceLifeDTO> lifeDTOList,Set<String> existsDept,String flag){
|
|
|
+ for (Map<String, Object> map: list){
|
|
|
+ EquipServiceLifeDTO lifeDTO = new EquipServiceLifeDTO();
|
|
|
+ lifeDTO.setOrg(map.get("name_").toString());
|
|
|
+ int value = Integer.parseInt(map.get("value").toString());
|
|
|
+ switch (flag){
|
|
|
+ case "O":
|
|
|
+ lifeDTO.setNumO(value);
|
|
|
+ break;
|
|
|
+ case "OT":
|
|
|
+ lifeDTO.setNumOT(value);
|
|
|
+ break;
|
|
|
+ case "TF":
|
|
|
+ lifeDTO.setNumTF(value);
|
|
|
+ break;
|
|
|
+ case "F":
|
|
|
+ lifeDTO.setNumF(value);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ lifeDTOList.add(lifeDTO);
|
|
|
+ existsDept.add(map.get("name_").toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public List<EquipDeptDTO> getEquipByPosition(int total){
|
|
|
+ String sql = "SELECT p.name_,q.bian_zhi_bu_men_,COUNT(bian_zhi_bu_men_)as value from ( " +
|
|
|
+ " SELECT bian_zhi_bu_men_ from t_sbdj WHERE di_dian_='%s') q, " +
|
|
|
+ " (SELECT name_,id_ from ibps_party_entity WHERE path_ like '%%%s%%' and DEPTH_>=3) p " +
|
|
|
+ " where q.bian_zhi_bu_men_=p.id_ GROUP BY q.bian_zhi_bu_men_ ";
|
|
|
+ List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(String.format(sql,getDiDian(),getDiDian()));
|
|
|
+ List<EquipDeptDTO> typeDTOList = new ArrayList<>();
|
|
|
+ Set<String> existsDept = new HashSet<>();
|
|
|
+ for (Map<String, Object> map: list){
|
|
|
+ EquipDeptDTO typeDTO = new EquipDeptDTO();
|
|
|
+ int value = Integer.parseInt(map.get("value").toString());
|
|
|
+ typeDTO.setValue(value);
|
|
|
+ typeDTO.setName(map.get("name_").toString());
|
|
|
+ typeDTO.setRate(getRate(total,value));
|
|
|
+ typeDTOList.add(typeDTO);
|
|
|
+ existsDept.add(map.get("name_").toString());
|
|
|
+ }
|
|
|
+ List<EquipDeptDTO> finalList = new ArrayList<>(typeDTOList);
|
|
|
+ List<Map<String, Object>> deptList = getPositionBy34(getDiDian());
|
|
|
+ for (Map<String, Object> dept : deptList) {
|
|
|
+ if (!existsDept.contains(dept.get("name_"))) {
|
|
|
+ EquipDeptDTO typeDTO = new EquipDeptDTO();
|
|
|
+ typeDTO.setName(dept.get("name_").toString());
|
|
|
+ typeDTO.setValue(0);
|
|
|
+ typeDTO.setRate("0.00");
|
|
|
+ finalList.add(typeDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return finalList;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<T> setPosition(List<T> original, Set<String> exists, Class<T> clazz) throws Exception {
|
|
|
+ Method setNameMethod = clazz.getMethod("setName", String.class);
|
|
|
+ List<Map<String, Object>> deptList = getPositionBy34(getDiDian());
|
|
|
+ for (Map<String, Object> map : deptList) {
|
|
|
+ if (!exists.contains(map.get("name_"))) {
|
|
|
+ for (T t : original) {
|
|
|
+ setNameMethod.invoke(t, map.get("name_"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return original;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<Map<String, Object>> getPositionBy34(String diDian){
|
|
|
+ String sql = "SELECT name_,id_ from ibps_party_entity WHERE path_ like '%%%s%%' and DEPTH_>=3";
|
|
|
+ return (List<Map<String, Object>>) commonDao.query(String.format(sql,diDian));
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<EquipTypeDTO> getEquipType(int total){
|
|
|
+ String sql = "SELECT she_bei_lei_xing_ name,COUNT(she_bei_lei_xing_) as value from t_sbdj WHERE di_dian_='%s' GROUP BY she_bei_lei_xing_";
|
|
|
+ List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(String.format(sql,getDiDian()));
|
|
|
+ List<EquipTypeDTO> typeDTOList = new ArrayList<>();
|
|
|
+ for (Map<String, Object> map: list){
|
|
|
+ EquipTypeDTO typeDTO = new EquipTypeDTO();
|
|
|
+ int value = Integer.parseInt(map.get("value").toString());
|
|
|
+ typeDTO.setValue(value);
|
|
|
+ typeDTO.setName(map.get("name").toString());
|
|
|
+ typeDTO.setRate(getRate(total,value));
|
|
|
+ typeDTOList.add(typeDTO);
|
|
|
+ }
|
|
|
+ return typeDTOList;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getRate(int total,int count){
|
|
|
+ BigDecimal sum = new BigDecimal(total);
|
|
|
+ BigDecimal sign = new BigDecimal(count);
|
|
|
+ if (sum.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ BigDecimal percentage = sign.divide(sum, 10, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
|
|
|
+ percentage = percentage.setScale(2, RoundingMode.HALF_UP);
|
|
|
+ return percentage.toString();
|
|
|
+ }else {
|
|
|
+ return "0.00";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public TrainGuardAutoPlanDto getPlanRate(String dept){
|
|
|
TrainGuardAutoPlanDto planDto = new TrainGuardAutoPlanDto();
|
|
|
String zdSql = "select count(*) as auto from t_rypxcjb where ji_hua_wai_jian_ in(select id_ from t_ndrypxjhzb) and ji_hua_lei_xing_='在岗培训' and di_dian_='"+getDiDian()+"'";
|