fd641acdcd5e44462ace4bd9f3bb6916c1278705.svn-base 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. package cn.com.goldenwater.dcproj.service.impl;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.constValue.SplitValue;
  4. import cn.com.goldenwater.dcproj.dao.AttStstnBaseDao;
  5. import cn.com.goldenwater.dcproj.dao.BisInspAllObjDao;
  6. import cn.com.goldenwater.dcproj.dao.BisInspAllRlationDao;
  7. import cn.com.goldenwater.dcproj.dao.BisInspStstnDao;
  8. import cn.com.goldenwater.dcproj.dao.RoleDao;
  9. import cn.com.goldenwater.dcproj.dto.BisInspStstnDto;
  10. import cn.com.goldenwater.dcproj.model.AttStstnBase;
  11. import cn.com.goldenwater.dcproj.model.BisInspAllObj;
  12. import cn.com.goldenwater.dcproj.model.BisInspAllRlation;
  13. import cn.com.goldenwater.dcproj.model.BisInspStstn;
  14. import cn.com.goldenwater.dcproj.model.Role;
  15. import cn.com.goldenwater.dcproj.param.BisInspAllObjParam;
  16. import cn.com.goldenwater.dcproj.param.BisInspAllRlationParam;
  17. import cn.com.goldenwater.dcproj.param.BisInspStstnParam;
  18. import cn.com.goldenwater.dcproj.param.BisInspStstnPbParam;
  19. import cn.com.goldenwater.dcproj.param.BisInspStstnSafParam;
  20. import cn.com.goldenwater.dcproj.param.BisInspStstnSceneParam;
  21. import cn.com.goldenwater.dcproj.param.BisInspStstnTmprParam;
  22. import cn.com.goldenwater.dcproj.param.RoleParam;
  23. import cn.com.goldenwater.dcproj.param.TypeParam;
  24. import cn.com.goldenwater.dcproj.service.BisInspObjStrategy;
  25. import cn.com.goldenwater.dcproj.service.BisInspStstnPbService;
  26. import cn.com.goldenwater.dcproj.service.BisInspStstnSafService;
  27. import cn.com.goldenwater.dcproj.service.BisInspStstnSceneService;
  28. import cn.com.goldenwater.dcproj.service.BisInspStstnService;
  29. import cn.com.goldenwater.dcproj.service.BisInspStstnTmprService;
  30. import cn.com.goldenwater.dcproj.utils.AdLevelUtil;
  31. import cn.com.goldenwater.dcproj.utils.Constant;
  32. import cn.com.goldenwater.id.util.UuidUtil;
  33. import com.github.pagehelper.PageHelper;
  34. import com.github.pagehelper.PageInfo;
  35. import org.apache.commons.collections.CollectionUtils;
  36. import org.apache.commons.collections.MapUtils;
  37. import org.apache.commons.lang3.StringUtils;
  38. import org.springframework.beans.BeanUtils;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.stereotype.Service;
  41. import org.springframework.transaction.annotation.Transactional;
  42. import javax.servlet.http.HttpServletResponse;
  43. import java.math.BigDecimal;
  44. import java.math.RoundingMode;
  45. import java.util.Date;
  46. import java.util.List;
  47. import java.util.Map;
  48. /**
  49. * @author lhc
  50. * @date 2021-7-13
  51. */
  52. @Service
  53. @Transactional
  54. public class BisInspStstnServiceImpl extends AbstractCrudService<BisInspStstn, BisInspStstnParam> implements BisInspStstnService, BisInspObjStrategy {
  55. @Autowired
  56. private BisInspStstnDao bisInspStstnDao;
  57. @Autowired
  58. private AttStstnBaseDao attStstnBaseDao;
  59. @Autowired
  60. private BisInspAllObjDao bisInspAllObjDao;
  61. @Autowired
  62. private BisInspStstnSafService bisInspStstnSafService;
  63. @Autowired
  64. private BisInspStstnSceneService bisInspStstnSceneService;
  65. @Autowired
  66. private BisInspStstnTmprService bisInspStstnTmprService;
  67. @Autowired
  68. private BisInspStstnPbService bisInspStstnPbService;
  69. public BisInspStstnServiceImpl(BisInspStstnDao bisInspStstnDao) {
  70. super(bisInspStstnDao);
  71. this.bisInspStstnDao = bisInspStstnDao;
  72. }
  73. @Autowired
  74. private BisInspAllRlationDao inspAllRlationDao;
  75. @Autowired
  76. private RoleDao roleDao;
  77. @Override
  78. public int insert(BisInspStstn bisInspStstn) {
  79. String uuid = UuidUtil.uuid(); // 生成uuid
  80. bisInspStstn.setId(uuid);
  81. bisInspStstn.setIntm(new Date());
  82. bisInspStstn.setUptm(new Date());
  83. bisInspStstn.setDataStat("0");
  84. bisInspStstn.setState("0");
  85. bisInspStstn.setState("0");
  86. bisInspStstn.setActualScore(0.0);
  87. bisInspStstn.setActualScore(0.0);
  88. bisInspStstn.setTotal(0.0);
  89. bisInspStstn.setSafScore(0.0);
  90. bisInspStstn.setTmprScore(0.0);
  91. bisInspStstn.setSceneScore(0.0);
  92. bisInspStstn.setSafTotal(0.0);
  93. bisInspStstn.setTmprTotal(0.0);
  94. bisInspStstn.setSceneTotal(0.0);
  95. bisInspStstn.setPbTotal(0.0);
  96. bisInspStstn.setPbScore(0.0);
  97. int ret = this.bisInspStstnDao.insert(bisInspStstn);
  98. //子表
  99. BisInspStstnSceneParam sceneParam = new BisInspStstnSceneParam();
  100. sceneParam.setRgstrId(uuid);
  101. sceneParam.setPersId(bisInspStstn.getPersId());
  102. bisInspStstnSceneService.insert(sceneParam);
  103. BisInspStstnSafParam safParam = new BisInspStstnSafParam();
  104. safParam.setRgstrId(uuid);
  105. safParam.setPersId(bisInspStstn.getPersId());
  106. bisInspStstnSafService.insert(safParam);
  107. BisInspStstnTmprParam tmprParam = new BisInspStstnTmprParam();
  108. tmprParam.setRgstrId(uuid);
  109. tmprParam.setPersId(bisInspStstn.getPersId());
  110. bisInspStstnTmprService.insert(tmprParam);
  111. // lxf 20230612 福建省 增加 党建进工地
  112. BisInspStstnPbParam pbParam = new BisInspStstnPbParam();
  113. pbParam.setRgstrId(uuid);
  114. pbParam.setPersId(bisInspStstn.getPersId());
  115. bisInspStstnPbService.insert(pbParam);
  116. return ret;
  117. }
  118. @Override
  119. public int update(BisInspStstn bisInspStstn) {
  120. bisInspStstn.setUptm(new Date());
  121. bisInspStstn.setTotal(judge(bisInspStstn.getSafTotal()) + judge(bisInspStstn.getSceneTotal()) + judge(bisInspStstn.getTmprTotal()));
  122. bisInspStstn.setStandardScore(judge(bisInspStstn.getSafScore()) + judge(bisInspStstn.getSceneScore()) + judge(bisInspStstn.getTmprScore()));
  123. // 计算评选成绩 党建进工地部分总分为100分,以20%的权重计入评选成绩;标准化建设部分按得分率换算成100分制后,以80%的权重计入评选成绩
  124. 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);
  125. bisInspStstn.setActualScore(actualScore.doubleValue());
  126. return this.bisInspStstnDao.update(bisInspStstn);
  127. }
  128. private double judge(Double value) {
  129. if (value == null) {
  130. return 0;
  131. }
  132. return value;
  133. }
  134. @Override
  135. public int delete(String id) {
  136. return this.bisInspStstnDao.delete(id);
  137. }
  138. @Override
  139. public PageInfo<BisInspStstnDto> findStstnPage(TypeParam param) {
  140. if (StringUtils.isNotBlank(param.getAdCode())) {
  141. param.setAdCode(String.valueOf(AdLevelUtil.SubAd(param.getAdCode()).get(SplitValue.SUBAD)));
  142. }
  143. if (StringUtils.isNotBlank(param.getAdCodes())) {
  144. param.setAdCodes(AdLevelUtil.getListAddvcd(param.getAdCodes()));
  145. }
  146. if (StringUtils.isNotBlank(param.getProvince())) {
  147. param.setProvince(AdLevelUtil.getAddvcd(param.getProvince()));
  148. }
  149. PageHelper.startPage(param);
  150. List<BisInspStstnDto> list = bisInspStstnDao.findStstnPage(param);
  151. // 计算标准化工地得分率
  152. if (null != list && list.size() > 0) {
  153. for (BisInspStstnDto bisInspStstnDto : list) {
  154. Double standardScore = bisInspStstnDto.getStandardScore();
  155. Double standardTotal = bisInspStstnDto.getStandardTotal();
  156. if (null != standardTotal && standardTotal.doubleValue() > 0d) {
  157. // 标准化应计总分 不为NULL的时候说明有打分,计算得分率
  158. if (null != standardScore) {
  159. BigDecimal standardRate = new BigDecimal(standardScore * 100).divide(new BigDecimal(standardTotal), 2, RoundingMode.HALF_UP);
  160. bisInspStstnDto.setStandardRate(standardRate.toString());
  161. }
  162. }
  163. }
  164. }
  165. return new PageInfo<>(list);
  166. }
  167. @Override
  168. public void insertObj(BisInspAllObj bisInspAllObj, String persId) {
  169. AttStstnBase base = attStstnBaseDao.get(bisInspAllObj.getCode());
  170. BisInspStstn rgstr = new BisInspStstn();
  171. BeanUtils.copyProperties(base, rgstr);
  172. rgstr.setObjId(bisInspAllObj.getObjId());
  173. rgstr.setPersId(persId);
  174. rgstr.setSafState("0");
  175. rgstr.setTmprState("0");
  176. rgstr.setSceneState("0");
  177. rgstr.setPbState("0");
  178. insert(rgstr);
  179. }
  180. @Override
  181. public String getType() {
  182. return "104";
  183. }
  184. @Override
  185. public void cleanObjData(String objId) {
  186. BisInspStstnParam param = new BisInspStstnParam();
  187. param.setObjId(objId);
  188. List<BisInspStstn> list = bisInspStstnDao.findList(param);
  189. if (CollectionUtils.isNotEmpty(list)) {
  190. String rgstrId = list.get(0).getId();
  191. //删除名录表
  192. BisInspAllObjParam bisInspAllObjParam = new BisInspAllObjParam();
  193. bisInspAllObjParam.setObjId(objId);
  194. this.bisInspAllObjDao.deleteBy(bisInspAllObjParam);
  195. //登记表
  196. bisInspStstnDao.delete(rgstrId);
  197. //子表
  198. BisInspStstnSceneParam sceneParam = new BisInspStstnSceneParam();
  199. sceneParam.setRgstrId(rgstrId);
  200. bisInspStstnSceneService.deleteBy(sceneParam);
  201. BisInspStstnSafParam safParam = new BisInspStstnSafParam();
  202. safParam.setRgstrId(rgstrId);
  203. bisInspStstnSafService.deleteBy(safParam);
  204. BisInspStstnTmprParam tmprParam = new BisInspStstnTmprParam();
  205. tmprParam.setRgstrId(rgstrId);
  206. bisInspStstnTmprService.deleteBy(tmprParam);
  207. BisInspStstnPbParam pbParam = new BisInspStstnPbParam();
  208. pbParam.setRgstrId(rgstrId);
  209. bisInspStstnTmprService.deleteBy(tmprParam);
  210. }
  211. }
  212. @Override
  213. public PageInfo findObjPageByType(TypeParam typeParam, HttpServletResponse response) {
  214. return this.findStstnPage(typeParam);
  215. }
  216. @Override
  217. public Object findObjListByType(TypeParam typeParam) {
  218. List<BisInspStstnDto> list = bisInspStstnDao.findStstnPage(typeParam);
  219. if (list.size() > 0) {
  220. for (BisInspStstnDto rgstrDto : list) {
  221. String adFullName = rgstrDto.getAdFullName();
  222. if (StringUtils.isBlank(adFullName)) {
  223. continue;
  224. }
  225. if (adFullName.contains(SplitValue.HENG_SPLIT)) {
  226. String[] split = adFullName.split(SplitValue.HENG_SPLIT);
  227. if (split.length == 3) {
  228. rgstrDto.setProvince(split[0]);
  229. rgstrDto.setCity(split[1]);
  230. rgstrDto.setCountry(split[2]);
  231. }
  232. if (split.length == 2) {
  233. rgstrDto.setProvince(split[0]);
  234. rgstrDto.setCity(split[1]);
  235. rgstrDto.setCountry("");
  236. }
  237. } else {
  238. rgstrDto.setProvince(adFullName);
  239. }
  240. }
  241. }
  242. return list;
  243. }
  244. @Override
  245. public List<BisInspStstnDto> findListByType(TypeParam typeParam) {
  246. if (StringUtils.isNotBlank(typeParam.getAdCode())) {
  247. typeParam.setAdCode(String.valueOf(AdLevelUtil.SubAd(typeParam.getAdCode()).get(SplitValue.SUBAD)));
  248. }
  249. if (StringUtils.isNotBlank(typeParam.getAdCodes())) {
  250. typeParam.setAdCodes(AdLevelUtil.getListAddvcd(typeParam.getAdCodes()));
  251. }
  252. if (StringUtils.isNotBlank(typeParam.getProvince())) {
  253. typeParam.setProvince(AdLevelUtil.getAddvcd(typeParam.getProvince()));
  254. }
  255. List<BisInspStstnDto> list = bisInspStstnDao.findStstnPage(typeParam);
  256. return list;
  257. }
  258. @Override
  259. public void updateState(Map<String, Object> map) {
  260. BisInspStstn rgstr = get(MapUtils.getString(map, "rgstrId"));
  261. if (Constant.STRING_TWO.equals(rgstr.getState())) {
  262. return;
  263. }
  264. String param = MapUtils.getString(map, "param");
  265. rgstr.setUptm(new Date());
  266. rgstr.setState(Constant.STRING_ONE);
  267. switch (param) {
  268. case "scene":
  269. if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) {
  270. rgstr.setSceneState(MapUtils.getString(map, "state"));
  271. }
  272. rgstr.setSceneScore(MapUtils.getDouble(map, "caseScore"));
  273. rgstr.setSceneTotal(MapUtils.getDouble(map, "total"));
  274. break;
  275. case "saf":
  276. if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) {
  277. rgstr.setSafState(MapUtils.getString(map, "state"));
  278. }
  279. rgstr.setSafScore(MapUtils.getDouble(map, "caseScore"));
  280. rgstr.setSafTotal(MapUtils.getDouble(map, "total"));
  281. break;
  282. case "tmpr":
  283. if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) {
  284. rgstr.setTmprState(MapUtils.getString(map, "state"));
  285. }
  286. rgstr.setTmprScore(MapUtils.getDouble(map, "caseScore"));
  287. rgstr.setTmprTotal(MapUtils.getDouble(map, "total"));
  288. break;
  289. case "pb":
  290. if (StringUtils.isNotBlank(MapUtils.getString(map, "state"))) {
  291. rgstr.setTmprState(MapUtils.getString(map, "state"));
  292. }
  293. rgstr.setPbScore(MapUtils.getDouble(map, "caseScore"));
  294. rgstr.setPbTotal(MapUtils.getDouble(map, "total"));
  295. break;
  296. default:
  297. }
  298. update(rgstr);
  299. }
  300. /**
  301. * 获取当前用户的标准化示范工地页签权限
  302. *
  303. * @param param
  304. * @return
  305. */
  306. @Override
  307. public String getTabPri(TypeParam param) {
  308. String curPersId = param.getPresId();
  309. // 判断角色
  310. RoleParam roleParam = new RoleParam();
  311. roleParam.setUserId(curPersId);
  312. roleParam.setOrgId(param.getOrgId());
  313. List<Role> roleList = roleDao.getTabPriByUserId(roleParam);
  314. boolean flag1 = false;
  315. boolean flag2 = false;
  316. boolean flag3 = false;
  317. if (null != roleList) {
  318. for (Role role : roleList) {
  319. if (role.getRoleName().contains("党建专家")) {
  320. flag1 = true;
  321. }
  322. if (role.getRoleName().contains("工地专家")) {
  323. flag2 = true;
  324. }
  325. if (role.getRoleName().contains("管理员") || role.getRoleName().contains("组长")) {
  326. flag3 = true;
  327. }
  328. }
  329. }
  330. if (flag3 || (flag1 && flag2)) {
  331. // 管理员 或 同时具有 党建 工地专家权限
  332. return "1";
  333. }
  334. // 判断对象所在组的 人员 身份类型
  335. BisInspAllRlationParam allRlationParam = new BisInspAllRlationParam();
  336. allRlationParam.setpType(param.getpType());
  337. allRlationParam.setOrgId(param.getOrgId());
  338. allRlationParam.setPersid(curPersId);
  339. List<BisInspAllRlation> allRlationList = inspAllRlationDao.getPerTypeByUserIdandObjId(allRlationParam);
  340. if (null != allRlationList) {
  341. for (BisInspAllRlation allRlation : allRlationList) {
  342. if ("1".equals(allRlation.getPertype())) {
  343. // 当前用户 在对象所在组里 身份类型 是 组长
  344. flag3 = true;
  345. }
  346. }
  347. }
  348. if (flag3) {
  349. // 组长
  350. return "1";
  351. }
  352. if (flag1) {
  353. // 党建
  354. return "3";
  355. }
  356. if (flag2) {
  357. // 工地
  358. return "2";
  359. }
  360. // 其他:不是管理员、 不具有党建、工地角色
  361. return "4";
  362. }
  363. @Override
  364. public BisInspStstn get(String key) {
  365. BisInspStstn inspStstn = this.bisInspStstnDao.get(key);
  366. // 计算标准化工地得分率
  367. if (null != inspStstn) {
  368. inspStstn.setStandardTotal(inspStstn.getTotal());
  369. inspStstn.setTotal(100D);
  370. Double standardScore = inspStstn.getStandardScore();
  371. if (null == standardScore) {
  372. standardScore = inspStstn.getActualScore();
  373. inspStstn.setStandardScore(standardScore);
  374. }
  375. Double standardTotal = inspStstn.getStandardTotal();
  376. if (null != standardTotal && standardTotal.doubleValue() > 0d) {
  377. // 标准化应计总分 不为NULL的时候说明有打分,计算得分率
  378. if (null != standardScore) {
  379. BigDecimal standardRate = new BigDecimal(standardScore * 100).divide(new BigDecimal(standardTotal), 2, RoundingMode.HALF_UP);
  380. inspStstn.setStandardRate(standardRate.toString());
  381. }
  382. }
  383. }
  384. return inspStstn;
  385. }
  386. }