package cn.com.goldenwater.dcproj.service.impl; import cn.com.goldenwater.core.service.AbstractCrudService; import cn.com.goldenwater.dcproj.constValue.SplitValue; import cn.com.goldenwater.dcproj.dao.AttStstnBaseDao; import cn.com.goldenwater.dcproj.dao.BisInspAllObjDao; import cn.com.goldenwater.dcproj.dao.BisInspAllRlationDao; import cn.com.goldenwater.dcproj.dao.BisInspStstnDao; import cn.com.goldenwater.dcproj.dao.RoleDao; import cn.com.goldenwater.dcproj.dto.BisInspStstnDto; import cn.com.goldenwater.dcproj.model.AttStstnBase; import cn.com.goldenwater.dcproj.model.BisInspAllObj; import cn.com.goldenwater.dcproj.model.BisInspAllRlation; import cn.com.goldenwater.dcproj.model.BisInspStstn; import cn.com.goldenwater.dcproj.model.Role; import cn.com.goldenwater.dcproj.param.BisInspAllObjParam; import cn.com.goldenwater.dcproj.param.BisInspAllRlationParam; import cn.com.goldenwater.dcproj.param.BisInspStstnParam; import cn.com.goldenwater.dcproj.param.BisInspStstnPbParam; import cn.com.goldenwater.dcproj.param.BisInspStstnSafParam; import cn.com.goldenwater.dcproj.param.BisInspStstnSceneParam; import cn.com.goldenwater.dcproj.param.BisInspStstnTmprParam; import cn.com.goldenwater.dcproj.param.RoleParam; import cn.com.goldenwater.dcproj.param.TypeParam; import cn.com.goldenwater.dcproj.service.BisInspObjStrategy; import cn.com.goldenwater.dcproj.service.BisInspStstnPbService; import cn.com.goldenwater.dcproj.service.BisInspStstnSafService; import cn.com.goldenwater.dcproj.service.BisInspStstnSceneService; import cn.com.goldenwater.dcproj.service.BisInspStstnService; import cn.com.goldenwater.dcproj.service.BisInspStstnTmprService; import cn.com.goldenwater.dcproj.utils.AdLevelUtil; import cn.com.goldenwater.dcproj.utils.Constant; import cn.com.goldenwater.id.util.UuidUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.List; import java.util.Map; /** * @author lhc * @date 2021-7-13 */ @Service @Transactional public class BisInspStstnServiceImpl extends AbstractCrudService implements BisInspStstnService, BisInspObjStrategy { @Autowired private BisInspStstnDao bisInspStstnDao; @Autowired private AttStstnBaseDao attStstnBaseDao; @Autowired private BisInspAllObjDao bisInspAllObjDao; @Autowired private BisInspStstnSafService bisInspStstnSafService; @Autowired private BisInspStstnSceneService bisInspStstnSceneService; @Autowired private BisInspStstnTmprService bisInspStstnTmprService; @Autowired private BisInspStstnPbService bisInspStstnPbService; public BisInspStstnServiceImpl(BisInspStstnDao bisInspStstnDao) { super(bisInspStstnDao); this.bisInspStstnDao = bisInspStstnDao; } @Autowired private BisInspAllRlationDao inspAllRlationDao; @Autowired private RoleDao roleDao; @Override public int insert(BisInspStstn bisInspStstn) { String uuid = UuidUtil.uuid(); // 生成uuid bisInspStstn.setId(uuid); bisInspStstn.setIntm(new Date()); bisInspStstn.setUptm(new Date()); bisInspStstn.setDataStat("0"); bisInspStstn.setState("0"); bisInspStstn.setState("0"); bisInspStstn.setActualScore(0.0); bisInspStstn.setActualScore(0.0); bisInspStstn.setTotal(0.0); bisInspStstn.setSafScore(0.0); bisInspStstn.setTmprScore(0.0); bisInspStstn.setSceneScore(0.0); bisInspStstn.setSafTotal(0.0); bisInspStstn.setTmprTotal(0.0); bisInspStstn.setSceneTotal(0.0); bisInspStstn.setPbTotal(0.0); bisInspStstn.setPbScore(0.0); int ret = this.bisInspStstnDao.insert(bisInspStstn); //子表 BisInspStstnSceneParam sceneParam = new BisInspStstnSceneParam(); sceneParam.setRgstrId(uuid); sceneParam.setPersId(bisInspStstn.getPersId()); bisInspStstnSceneService.insert(sceneParam); BisInspStstnSafParam safParam = new BisInspStstnSafParam(); safParam.setRgstrId(uuid); safParam.setPersId(bisInspStstn.getPersId()); bisInspStstnSafService.insert(safParam); BisInspStstnTmprParam tmprParam = new BisInspStstnTmprParam(); tmprParam.setRgstrId(uuid); tmprParam.setPersId(bisInspStstn.getPersId()); bisInspStstnTmprService.insert(tmprParam); // lxf 20230612 福建省 增加 党建进工地 BisInspStstnPbParam pbParam = new BisInspStstnPbParam(); pbParam.setRgstrId(uuid); pbParam.setPersId(bisInspStstn.getPersId()); bisInspStstnPbService.insert(pbParam); return ret; } @Override public int update(BisInspStstn bisInspStstn) { bisInspStstn.setUptm(new Date()); bisInspStstn.setTotal(judge(bisInspStstn.getSafTotal()) + judge(bisInspStstn.getSceneTotal()) + judge(bisInspStstn.getTmprTotal())); bisInspStstn.setStandardScore(judge(bisInspStstn.getSafScore()) + judge(bisInspStstn.getSceneScore()) + judge(bisInspStstn.getTmprScore())); // 计算评选成绩 党建进工地部分总分为100分,以20%的权重计入评选成绩;标准化建设部分按得分率换算成100分制后,以80%的权重计入评选成绩 BigDecimal actualScore = new BigDecimal(0.8).multiply((null == bisInspStstn.getTotal() || null == bisInspStstn.getStandardScore() || 0 == bisInspStstn.getTotal().intValue() ? BigDecimal.ZERO : new BigDecimal(100 * bisInspStstn.getStandardScore()).divide(new BigDecimal(bisInspStstn.getTotal()), 2, RoundingMode.HALF_UP))) .add(new BigDecimal(0.2).multiply(new BigDecimal(null == bisInspStstn.getPbScore() ? 0 : bisInspStstn.getPbScore()))).setScale(2,BigDecimal.ROUND_HALF_UP); bisInspStstn.setActualScore(actualScore.doubleValue()); return this.bisInspStstnDao.update(bisInspStstn); } private double judge(Double value) { if (value == null) { return 0; } return value; } @Override public int delete(String id) { return this.bisInspStstnDao.delete(id); } @Override public PageInfo findStstnPage(TypeParam param) { if (StringUtils.isNotBlank(param.getAdCode())) { param.setAdCode(String.valueOf(AdLevelUtil.SubAd(param.getAdCode()).get(SplitValue.SUBAD))); } if (StringUtils.isNotBlank(param.getAdCodes())) { param.setAdCodes(AdLevelUtil.getListAddvcd(param.getAdCodes())); } if (StringUtils.isNotBlank(param.getProvince())) { param.setProvince(AdLevelUtil.getAddvcd(param.getProvince())); } PageHelper.startPage(param); List list = bisInspStstnDao.findStstnPage(param); // 计算标准化工地得分率 if (null != list && list.size() > 0) { for (BisInspStstnDto bisInspStstnDto : list) { Double standardScore = bisInspStstnDto.getStandardScore(); Double standardTotal = bisInspStstnDto.getStandardTotal(); if (null != standardTotal && standardTotal.doubleValue() > 0d) { // 标准化应计总分 不为NULL的时候说明有打分,计算得分率 if (null != standardScore) { BigDecimal standardRate = new BigDecimal(standardScore * 100).divide(new BigDecimal(standardTotal), 2, RoundingMode.HALF_UP); bisInspStstnDto.setStandardRate(standardRate.toString()); } } } } return new PageInfo<>(list); } @Override public void insertObj(BisInspAllObj bisInspAllObj, String persId) { AttStstnBase base = attStstnBaseDao.get(bisInspAllObj.getCode()); BisInspStstn rgstr = new BisInspStstn(); BeanUtils.copyProperties(base, rgstr); rgstr.setObjId(bisInspAllObj.getObjId()); rgstr.setPersId(persId); rgstr.setSafState("0"); rgstr.setTmprState("0"); rgstr.setSceneState("0"); rgstr.setPbState("0"); insert(rgstr); } @Override public String getType() { return "104"; } @Override public void cleanObjData(String objId) { BisInspStstnParam param = new BisInspStstnParam(); param.setObjId(objId); List list = bisInspStstnDao.findList(param); if (CollectionUtils.isNotEmpty(list)) { String rgstrId = list.get(0).getId(); //删除名录表 BisInspAllObjParam bisInspAllObjParam = new BisInspAllObjParam(); bisInspAllObjParam.setObjId(objId); this.bisInspAllObjDao.deleteBy(bisInspAllObjParam); //登记表 bisInspStstnDao.delete(rgstrId); //子表 BisInspStstnSceneParam sceneParam = new BisInspStstnSceneParam(); sceneParam.setRgstrId(rgstrId); bisInspStstnSceneService.deleteBy(sceneParam); BisInspStstnSafParam safParam = new BisInspStstnSafParam(); safParam.setRgstrId(rgstrId); bisInspStstnSafService.deleteBy(safParam); BisInspStstnTmprParam tmprParam = new BisInspStstnTmprParam(); tmprParam.setRgstrId(rgstrId); bisInspStstnTmprService.deleteBy(tmprParam); BisInspStstnPbParam pbParam = new BisInspStstnPbParam(); pbParam.setRgstrId(rgstrId); bisInspStstnTmprService.deleteBy(tmprParam); } } @Override public PageInfo findObjPageByType(TypeParam typeParam, HttpServletResponse response) { return this.findStstnPage(typeParam); } @Override public Object findObjListByType(TypeParam typeParam) { List list = bisInspStstnDao.findStstnPage(typeParam); if (list.size() > 0) { for (BisInspStstnDto rgstrDto : list) { String adFullName = rgstrDto.getAdFullName(); if (StringUtils.isBlank(adFullName)) { continue; } if (adFullName.contains(SplitValue.HENG_SPLIT)) { String[] split = adFullName.split(SplitValue.HENG_SPLIT); if (split.length == 3) { rgstrDto.setProvince(split[0]); rgstrDto.setCity(split[1]); rgstrDto.setCountry(split[2]); } if (split.length == 2) { rgstrDto.setProvince(split[0]); rgstrDto.setCity(split[1]); rgstrDto.setCountry(""); } } else { rgstrDto.setProvince(adFullName); } } } return list; } @Override public List findListByType(TypeParam typeParam) { if (StringUtils.isNotBlank(typeParam.getAdCode())) { typeParam.setAdCode(String.valueOf(AdLevelUtil.SubAd(typeParam.getAdCode()).get(SplitValue.SUBAD))); } if (StringUtils.isNotBlank(typeParam.getAdCodes())) { typeParam.setAdCodes(AdLevelUtil.getListAddvcd(typeParam.getAdCodes())); } if (StringUtils.isNotBlank(typeParam.getProvince())) { typeParam.setProvince(AdLevelUtil.getAddvcd(typeParam.getProvince())); } List list = bisInspStstnDao.findStstnPage(typeParam); return list; } @Override public void updateState(Map map) { BisInspStstn rgstr = get(MapUtils.getString(map, "rgstrId")); if (Constant.STRING_TWO.equals(rgstr.getState())) { return; } String param = MapUtils.getString(map, "param"); rgstr.setUptm(new Date()); rgstr.setState(Constant.STRING_ONE); switch (param) { case "scene": if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) { rgstr.setSceneState(MapUtils.getString(map, "state")); } rgstr.setSceneScore(MapUtils.getDouble(map, "caseScore")); rgstr.setSceneTotal(MapUtils.getDouble(map, "total")); break; case "saf": if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) { rgstr.setSafState(MapUtils.getString(map, "state")); } rgstr.setSafScore(MapUtils.getDouble(map, "caseScore")); rgstr.setSafTotal(MapUtils.getDouble(map, "total")); break; case "tmpr": if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) { rgstr.setTmprState(MapUtils.getString(map, "state")); } rgstr.setTmprScore(MapUtils.getDouble(map, "caseScore")); rgstr.setTmprTotal(MapUtils.getDouble(map, "total")); break; case "pb": if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) { rgstr.setTmprState(MapUtils.getString(map, "state")); } rgstr.setPbScore(MapUtils.getDouble(map, "caseScore")); rgstr.setPbTotal(MapUtils.getDouble(map, "total")); break; default: } update(rgstr); } /** * 获取当前用户的标准化示范工地页签权限 * * @param param * @return */ @Override public String getTabPri(TypeParam param) { String curPersId = param.getPresId(); // 判断角色 RoleParam roleParam = new RoleParam(); roleParam.setUserId(curPersId); roleParam.setOrgId(param.getOrgId()); List roleList = roleDao.getTabPriByUserId(roleParam); boolean flag1 = false; boolean flag2 = false; boolean flag3 = false; if (null != roleList) { for (Role role : roleList) { if (role.getRoleName().contains("党建专家")) { flag1 = true; } if (role.getRoleName().contains("工地专家")) { flag2 = true; } if (role.getRoleName().contains("管理员") || role.getRoleName().contains("组长")) { flag3 = true; } } } if (flag3 || (flag1 && flag2)) { // 管理员 或 同时具有 党建 工地专家权限 return "1"; } // 判断对象所在组的 人员 身份类型 BisInspAllRlationParam allRlationParam = new BisInspAllRlationParam(); allRlationParam.setpType(param.getpType()); allRlationParam.setOrgId(param.getOrgId()); allRlationParam.setPersid(curPersId); List allRlationList = inspAllRlationDao.getPerTypeByUserIdandObjId(allRlationParam); if (null != allRlationList) { for (BisInspAllRlation allRlation : allRlationList) { if ("1".equals(allRlation.getPertype())) { // 当前用户 在对象所在组里 身份类型 是 组长 flag3 = true; } } } if (flag3) { // 组长 return "1"; } if (flag1) { // 党建 return "3"; } if (flag2) { // 工地 return "2"; } // 其他:不是管理员、 不具有党建、工地角色 return "4"; } @Override public BisInspStstn get(String key) { BisInspStstn inspStstn = this.bisInspStstnDao.get(key); // 计算标准化工地得分率 if (null != inspStstn) { inspStstn.setStandardTotal(inspStstn.getTotal()); inspStstn.setTotal(100D); Double standardScore = inspStstn.getStandardScore(); if (null == standardScore) { standardScore = inspStstn.getActualScore(); inspStstn.setStandardScore(standardScore); } Double standardTotal = inspStstn.getStandardTotal(); if (null != standardTotal && standardTotal.doubleValue() > 0d) { // 标准化应计总分 不为NULL的时候说明有打分,计算得分率 if (null != standardScore) { BigDecimal standardRate = new BigDecimal(standardScore * 100).divide(new BigDecimal(standardTotal), 2, RoundingMode.HALF_UP); inspStstn.setStandardRate(standardRate.toString()); } } } return inspStstn; } }