diff --git a/server/src/main/java/com/aisino/iles/lawenforcement/service/SupervisionCheckService.java b/server/src/main/java/com/aisino/iles/lawenforcement/service/SupervisionCheckService.java new file mode 100644 index 0000000..d8f088a --- /dev/null +++ b/server/src/main/java/com/aisino/iles/lawenforcement/service/SupervisionCheckService.java @@ -0,0 +1,453 @@ +package com.aisino.iles.lawenforcement.service; + +import com.aisino.iles.common.service.FtpService; +import com.aisino.iles.common.util.PageableHelper; +import com.aisino.iles.lawenforcement.model.*; +import com.aisino.iles.lawenforcement.model.dto.SupervisionCheckDto; +import com.aisino.iles.lawenforcement.model.dto.SupervisionCheckStatisticsDto; +import com.aisino.iles.lawenforcement.model.enums.FlowNode; +import com.aisino.iles.lawenforcement.model.query.SupervisionCheckQuery; +import com.aisino.iles.lawenforcement.repository.AgencyRepository; +import com.aisino.iles.lawenforcement.repository.EnforceCheckRepository; +import com.aisino.iles.lawenforcement.repository.EnforcementInfoRepository; +import com.aisino.iles.lawenforcement.repository.SupervisionCheckRepository; +import com.smartlx.sso.client.model.RemoteUserInfo; +import jakarta.persistence.criteria.Join; +import jakarta.persistence.criteria.JoinType; +import jakarta.persistence.criteria.Predicate; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 督导检查服务类 + */ +@Service +public class SupervisionCheckService { + + private final SupervisionCheckRepository supervisionCheckRepository; + private final EnforcementInfoRepository enforcementInfoRepository; + private final EnforceCheckRepository enforceCheckRepository; + private final AgencyRepository agencyRepo; + private final FtpService ftpService; + + public SupervisionCheckService(SupervisionCheckRepository supervisionCheckRepository, + EnforcementInfoRepository enforcementInfoRepository, + EnforceCheckRepository enforceCheckRepository, + AgencyRepository agencyRepo,FtpService ftpService) { + this.supervisionCheckRepository = supervisionCheckRepository; + this.enforcementInfoRepository = enforcementInfoRepository; + this.enforceCheckRepository = enforceCheckRepository; + this.agencyRepo = agencyRepo; + this.ftpService = ftpService; + } + + /** + * 保存督导检查信息 + * + * @param supervisionCheckDto 督导检查信息 + * @return 保存后的督导检查信息 + */ + @Transactional + public void saveSupervisionChecks(SupervisionCheckDto supervisionCheckDto,RemoteUserInfo user) { + Agency currentAgency = agencyRepo.findByAgencyCode(user.getGajgjgdm()).orElseThrow(() -> new RuntimeException("当前用户机构数据错误,请检查!")); + if("single".equals(supervisionCheckDto.getType())){ + SupervisionCheck supervisionCheck = new SupervisionCheck(); + supervisionCheck.setEnterpriseId(supervisionCheckDto.getEnterprise().getEnterpriseId()); + supervisionCheck.setAgencyId(supervisionCheckDto.getAgency().getAgencyId()); + supervisionCheck.setDeliverAgencyLevel(supervisionCheckDto.getAgency().getAgencyLevel()); + supervisionCheck.setDescription(supervisionCheckDto.getDescription()); + supervisionCheck.setDeliverAgencyId(currentAgency.getAgencyId()); + supervisionCheck.setDeliverAgencyLevel(currentAgency.getAgencyLevel()); + supervisionCheck.setDeliverPerson(user.getXm()); + supervisionCheck.setCheckType(supervisionCheckDto.getCheckType()); + + // todo + if("交叉互查".equals(supervisionCheckDto.getCheckType())){ + supervisionCheck.setCheckStatus(SupervisionCheck.CheckStatus.reviewing_done); + }else{ + supervisionCheck.setCheckStatus(SupervisionCheck.CheckStatus.pending); + } + supervisionCheck.setDeliverTime(LocalDateTime.now()); + supervisionCheck.setEvidence(supervisionCheckDto.getEvidence()); + saveSupervisionCheck(supervisionCheck); + }else{ + List supervisionChecks = new ArrayList<>(); + supervisionCheckDto.getEnterprises().forEach(enterprise -> { + SupervisionCheck supervisionCheck = new SupervisionCheck(); + supervisionCheck.setEnterpriseId(enterprise.getEnterpriseId()); + supervisionCheck.setAgencyId(supervisionCheckDto.getAgency().getAgencyId()); + supervisionCheck.setDescription(supervisionCheckDto.getDescription()); + supervisionCheck.setDeliverAgencyId(currentAgency.getAgencyId()); + supervisionCheck.setDeliverAgencyLevel(currentAgency.getAgencyLevel()); + supervisionCheck.setDeliverPerson(user.getXm()); + supervisionCheck.setCheckType(supervisionCheckDto.getCheckType()); + if("交叉互查".equals(supervisionCheckDto.getCheckType())){ + supervisionCheck.setCheckStatus(SupervisionCheck.CheckStatus.reviewing_done); + }else{ + supervisionCheck.setCheckStatus(SupervisionCheck.CheckStatus.pending); + } + supervisionCheck.setDeliverTime(LocalDateTime.now()); + supervisionCheck.setEvidence(supervisionCheckDto.getEvidence()); + supervisionChecks.add(supervisionCheck); + }); + saveSupervisionChecks(supervisionChecks); + } + } + /** + * 保存单条督导检查信息 + * + * @param supervisionCheck 督导检查信息 + * @return 保存后的督导检查信息 + */ + @Transactional + public SupervisionCheck saveSupervisionCheck(SupervisionCheck supervisionCheck) { + return supervisionCheckRepository.save(supervisionCheck); + } + + /** + * 督导检查审批 + * + * @param supervisionCheck 督导检查信息 + * @return 保存后的督导检查信息 + */ + @Transactional + public SupervisionCheck reviewSupervisionCheck(SupervisionCheck supervisionCheck,RemoteUserInfo user) { + return supervisionCheckRepository.findById(supervisionCheck.getCheckId()).map(s ->{ + s.setCheckStatus(supervisionCheck.getCheckStatus()); + s.setVerifyDesc(supervisionCheck.getVerifyDesc()); + s.setVerifyTime(LocalDateTime.now()); + s.setVerifyUserName(user.getXm()); + s.setVerifyUserId(user.getYhwybs()); + return supervisionCheckRepository.save(s); + }).get(); + } + + /** + * 批量保存督导检查信息 + * + * @param supervisionChecks 督导检查信息列表 + */ + @Transactional + public void saveSupervisionChecks(List supervisionChecks) { + supervisionCheckRepository.saveAll(supervisionChecks); + } + + /** + * 根据ID查询督导检查信息 + * + * @param checkId 督导检查ID + * @return 督导检查信息 + */ + public Optional findSupervisionCheckById(String checkId) { + return supervisionCheckRepository.findById(checkId).map(supervisionCheck -> { + supervisionCheck.getDeliverAgency().getAgencyName(); + supervisionCheck.getEnterprise().getUnitName(); + switch (supervisionCheck.getCheckStatus().getValue()){ + case "pending" -> supervisionCheck.setCheckStatusName("待审批"); + case "reviewing_done" -> supervisionCheck.setCheckStatusName("审批通过"); + case "reviewing_failed" -> supervisionCheck.setCheckStatusName("审批不通过"); + case "completed" -> supervisionCheck.setCheckStatusName("已处理"); + } + String savePath = String.valueOf(supervisionCheck.getEvidence().get("savePathName")); + supervisionCheck.getEvidence().put("downloadUrl",ftpService.getFileUrl(savePath)); + supervisionCheck.getEvidence().put("url",ftpService.getFileUrl(savePath)); + return supervisionCheck; + }); + } + + /** + * 督导检查任务保存执法信息和检查项 + * + * @param supervisionCheckDto 督导检查信息 + */ + @Transactional + public void addEnforcementInfoCheck(SupervisionCheckDto supervisionCheckDto,RemoteUserInfo user) { + Agency currentAgency = agencyRepo.findByAgencyCode(user.getGajgjgdm()).orElseThrow(() -> new RuntimeException("当前用户机构数据错误,请检查!")); + if("single".equals(supervisionCheckDto.getType())){ + SupervisionCheck supervisionCheck = supervisionCheckDto.getSupervisionCheck(); + + EnforcementInfo enforcementInfo = new EnforcementInfo(); + String dataFrom = ""; + if(supervisionCheck.getDeliverAgencyLevel()>currentAgency.getAgencyLevel()){ + dataFrom="5"; + }else if(supervisionCheck.getDeliverAgencyLevel().equals(currentAgency.getAgencyLevel())){ + dataFrom="6"; + } + enforcementInfo.setDataFrom(dataFrom); + enforcementInfo.setEnterpriseId(supervisionCheck.getEnterpriseId()); + enforcementInfo.setAgencyId(supervisionCheck.getAgencyId()); + enforcementInfo.setCurrentNodeCode(FlowNode.plan_approved); + enforcementInfo.setCurrentNode("方案审批通过"); + enforcementInfo.setCreateTime(LocalDateTime.now()); + enforcementInfoRepository.save(enforcementInfo); + + + + EnforceCheck enforceCheck = new EnforceCheck(); + Optional.ofNullable(supervisionCheckDto.getCheckItemIds()).ifPresent(ids -> enforceCheck.setCheckItemIds(String.join(",", ids))); + enforceCheck.setCheckType("5"); + enforceCheck.setEnforcementId(enforcementInfo.getEnforcementId()); + enforceCheck.setCreateTime(LocalDateTime.now()); + enforceCheck.setCheckStatus("1"); + enforceCheck.setCheckFlag("1"); + if("督导检查".equals(supervisionCheck.getCheckType())){ + enforceCheck.setCheckType("5"); + }else if("交叉互查".equals(supervisionCheck.getCheckType())){ + enforceCheck.setCheckType("6"); + } + enforceCheck.setPlanId(supervisionCheck.getCheckId()); + enforceCheck.setWriterId(user.getYhwybs()); + enforceCheck.setCreatedBy(user.getXm()); + enforceCheck.setCreatedAccountBy(user.getYhwybs()); + enforceCheckRepository.save(enforceCheck); + + supervisionCheckRepository.findById(supervisionCheck.getCheckId()).map(s->{ + s.setEnforcementId(enforcementInfo.getEnforcementId()); + s.setCheckStatus(SupervisionCheck.CheckStatus.completed); + return s; + }); + + }else{ + supervisionCheckDto.getSupervisionChecks().forEach(supervisionCheck -> { + EnforcementInfo enforcementInfo = new EnforcementInfo(); + String dataFrom = ""; + if(supervisionCheck.getDeliverAgencyLevel()>currentAgency.getAgencyLevel()){ + dataFrom="5"; + }else if(supervisionCheck.getDeliverAgencyLevel().equals(currentAgency.getAgencyLevel())){ + dataFrom="6"; + } + + + enforcementInfo.setDataFrom(dataFrom); + enforcementInfo.setEnterpriseId(supervisionCheck.getEnterpriseId()); + enforcementInfo.setAgencyId(supervisionCheck.getAgencyId()); + enforcementInfo.setCurrentNodeCode(FlowNode.plan_approved); + enforcementInfo.setCurrentNode("方案审批通过"); + enforcementInfo.setCreateTime(LocalDateTime.now()); + enforcementInfoRepository.save(enforcementInfo); + + + + EnforceCheck enforceCheck = new EnforceCheck(); + Optional.ofNullable(supervisionCheckDto.getCheckItemIds()).ifPresent(ids -> enforceCheck.setCheckItemIds(String.join(",", ids))); + enforceCheck.setCheckType("5"); + enforceCheck.setEnforcementId(enforcementInfo.getEnforcementId()); + enforceCheck.setCreateTime(LocalDateTime.now()); + enforceCheck.setCheckStatus("1"); + enforceCheck.setCheckFlag("1"); + enforceCheck.setPlanId(supervisionCheck.getCheckId()); + if("督导检查".equals(supervisionCheck.getCheckType())){ + enforceCheck.setCheckType("5"); + }else if("交叉互查".equals(supervisionCheck.getCheckType())){ + enforceCheck.setCheckType("6"); + } + enforceCheck.setWriterId(user.getYhwybs()); + enforceCheck.setCreatedBy(user.getXm()); + enforceCheck.setCreatedAccountBy(user.getYhwybs()); + enforceCheckRepository.save(enforceCheck); + + supervisionCheckRepository.findById(supervisionCheck.getCheckId()).map(s->{ + s.setEnforcementId(enforcementInfo.getEnforcementId()); + s.setCheckStatus(SupervisionCheck.CheckStatus.completed); + return s; + }); + }); + } + } + + /** + * 根据查询条件分页查询督导检查信息 + * + * @param query 查询条件 + * @return 分页督导检查信息 + */ + public Page findSupervisionChecksPage(SupervisionCheckQuery query, RemoteUserInfo user) { + return supervisionCheckRepository.findAll(buildSpecification(query, user), PageableHelper.buildPageRequest(query.page(), query.pageSize(), query.sort(), query.dir())).map(this::getSupervisionCheckInfo); + } + + /** + * 构建查询条件 + * + * @param query 查询条件 + * @return 规格 + */ + private Specification buildSpecification(SupervisionCheckQuery query, RemoteUserInfo user) { + Agency currentAgency = agencyRepo.findByAgencyCode(user.getGajgjgdm()).orElseThrow(() -> new RuntimeException("当前用户机构数据错误,请检查!")); + return (root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + + if(query.getCheckStatus()!=null){ + Optional.ofNullable(query.getCheckStatus()).ifPresent(o->predicates.add(criteriaBuilder.equal(root.get(SupervisionCheck_.checkStatus),o))); + }else{ + Optional.ofNullable(query.getStatus()).filter(com.aisino.iles.common.util.StringUtils::isNotEmpty).ifPresent(o -> { + List orPredicates = Arrays.stream(o.split(",")) + .map(code -> criteriaBuilder.equal(root.get(SupervisionCheck_.checkStatus), SupervisionCheck.CheckStatus.fromString(code))) + .collect(Collectors.toList()); + predicates.add(orPredicates.size() == 1 ? orPredicates.get(0) : criteriaBuilder.or(orPredicates.toArray(new Predicate[0]))); + }); + } + Optional.ofNullable(query.getCheckType()).ifPresent(o->predicates.add(criteriaBuilder.equal(root.get(SupervisionCheck_.checkType),o))); + Optional.ofNullable(query.getDeliverTime()).filter(f -> f.length == 2).map(f -> { + List timePredicates = new ArrayList<>(); + Optional.ofNullable(f[0]).map(from -> criteriaBuilder.greaterThanOrEqualTo(root.get("deliverTime"), from)).ifPresent(timePredicates::add); + Optional.ofNullable(f[1]).map(to -> criteriaBuilder.lessThanOrEqualTo(root.get("deliverTime"), to)).ifPresent(timePredicates::add); + return timePredicates; + }).ifPresent(predicates::addAll); + if("sp".equals(query.getFlag())){ + //审批查询转交的审批机构 + Join supervisionCheckAgencyJoin = root.join("deliverAgency", JoinType.LEFT); + predicates.add(criteriaBuilder.equal((supervisionCheckAgencyJoin.get(Agency_.agencyCode)),currentAgency.getAgencyCode())); + } + if("cl".equals(query.getFlag())){ + //被转交机构查任务 + Join supervisionCheckAgencyJoin = root.join("agency", JoinType.LEFT); + predicates.add(criteriaBuilder.equal((supervisionCheckAgencyJoin.get(Agency_.agencyCode)),currentAgency.getAgencyCode())); + } + + + if (StringUtils.hasText(query.getUnitName())) { + Join supervisionCheckenterpriseJoin = root.join("enterprise", JoinType.LEFT); + predicates.add(criteriaBuilder.like((supervisionCheckenterpriseJoin.get(Enterprise_.unitName)), '%' + query.getUnitName() + '%')); + } + + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } + private SupervisionCheck getSupervisionCheckInfo(SupervisionCheck o) { + o.getDeliverAgency().getAgencyName(); + o.getEnterprise().getUnitName(); + switch (o.getCheckStatus().getValue()){ + case "pending" -> o.setCheckStatusName("待审批"); + case "reviewing_done" -> o.setCheckStatusName("审批通过"); + case "reviewing_failed" -> o.setCheckStatusName("审批不通过"); + case "completed" -> o.setCheckStatusName("已处理"); + } + + Optional.ofNullable(o.getEvidence()).ifPresent(e->{ + Optional.ofNullable(e.get("filesData")).ifPresent(list->{ + List> files = (ArrayList)list; + files.forEach(f->{ + String savePathName=f.get("savePathName"); + String url = ftpService.getFileUrl(savePathName ) ; + String downloadUrl = ftpService.getFileUrl(savePathName); + f.put("url", url); + f.put("downloadUrl", downloadUrl); + }); + }); + }); + return o; + } + /** + * 条件查询督导检查信息 + * + * @param spec 查询条件 + * @return 督导检查信息列表 + */ + public List findSupervisionChecksBySpec(Specification spec) { + return supervisionCheckRepository.findAll(spec); + } + + /** + * 条件分页查询督导检查信息 + * + * @param spec 查询条件 + * @param pageRequest 分页请求 + * @return 分页督导检查信息 + */ + public Page findSupervisionChecksPageBySpec(Specification spec, PageRequest pageRequest) { + return supervisionCheckRepository.findAll(spec, pageRequest); + } + + /** + * 根据ID删除督导检查信息 + * + * @param checkId 督导检查ID + */ + @Transactional + public void deleteSupervisionCheckById(String checkId) { + supervisionCheckRepository.deleteById(checkId); + } + + /** + * 批量删除督导检查信息 + * + * @param checkIds 督导检查ID列表 + */ + @Transactional + public void deleteSupervisionChecksByIds(List checkIds) { + supervisionCheckRepository.deleteAllById(checkIds); + } + + /** + * 检查督导检查是否存在 + * + * @param checkId 督导检查ID + * @return 是否存在 + */ + public boolean existsSupervisionCheckById(String checkId) { + return supervisionCheckRepository.existsById(checkId); + } + + /** + * 获取督导检查总数 + * + * @return 督导检查总数 + */ + public long countSupervisionChecks() { + return supervisionCheckRepository.count(); + } + + /** + * 更新督导检查状态 + * + * @param checkId 督导检查ID + * @param checkStatus 检查状态 + * @return 更新后的督导检查信息 + */ + @Transactional + public Optional updateSupervisionCheckStatus(String checkId, SupervisionCheck.CheckStatus checkStatus) { + Optional supervisionCheckOpt = supervisionCheckRepository.findById(checkId); + if (supervisionCheckOpt.isPresent()) { + SupervisionCheck supervisionCheck = supervisionCheckOpt.get(); + supervisionCheck.setCheckStatus(checkStatus); + return Optional.of(supervisionCheckRepository.save(supervisionCheck)); + } + return Optional.empty(); + } + + /** + * 执法检查统计 + * + * @param query 查询条件 + * @return 统计结果 + */ + public List checkStatistics(SupervisionCheckQuery query, RemoteUserInfo user) { +// Jurisdiction userJurisdiction = user.getJurisdictions().stream().findFirst().orElseThrow(); +// String gxdwbm = com.aisino.iles.common.util.StringUtils.trimTrailingString((Optional.ofNullable(query.getGxdwbm()).filter(StringUtils::hasText).orElse(userJurisdiction.getJurisdictionCode())), "00") + "%"; +// Integer ilevel = Optional.ofNullable(query.getIlevel()).orElse(userJurisdiction.getJurisdictionLevel()); + return supervisionCheckRepository.checkStatistics(com.aisino.iles.common.util.StringUtils.trimEven0(query.getGxdwbm()) + "%", query.getIlevel()); + } + + public List sdywStatistics(SupervisionCheckQuery query, RemoteUserInfo user) { + return null; +// String agencyCode = com.aisino.iles.common.util.StringUtils.trimEven0(query.getAgencyCode()) + "%"; +// List agencys = agencyRepo.findLikeAgencyCode(agencyCode, query.getAgencyLevel()); +// return agencys.stream().map(agency -> { +// SupervisionCheckStatisticsDto statisticsDto = new SupervisionCheckStatisticsDto(); +// statisticsDto.setJurisdictionCode(agency.getAgencyCode()); +// statisticsDto.setJurisdictionName(agency.getAgencyName()); +// statisticsDto.setHasChildren(agency.getLeaf() ? 0 : 1); +// statisticsDto.setJurisdictionLevel(agency.getAgencyLevel()); +// statisticsDto.setChecks(0); +// return statisticsDto; +// }).collect(Collectors.toList()); + } +} diff --git a/server/src/main/java/com/aisino/iles/lawenforcement/service/ZfclglService.java b/server/src/main/java/com/aisino/iles/lawenforcement/service/ZfclglService.java new file mode 100644 index 0000000..e13edf2 --- /dev/null +++ b/server/src/main/java/com/aisino/iles/lawenforcement/service/ZfclglService.java @@ -0,0 +1,195 @@ +package com.aisino.iles.lawenforcement.service; + +import com.aisino.iles.common.util.BeanUtils; +import com.aisino.iles.lawenforcement.model.Agency; +import com.aisino.iles.lawenforcement.model.Zfclgl; +import com.aisino.iles.lawenforcement.model.Zfclgl_; +import com.aisino.iles.lawenforcement.model.query.ZfclglQuery; +import com.aisino.iles.lawenforcement.repository.AgencyRepository; +import com.aisino.iles.lawenforcement.repository.ZfclglRepository; +import com.smartlx.sso.client.model.RemoteUserInfo; +import jakarta.persistence.criteria.Predicate; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.util.StringUtils; + +import java.util.*; + +/** + * 执法车辆管理 + */ +@Slf4j +@Service +public class ZfclglService { + + private final ZfclglRepository zfclglRep; + private final AgencyRepository agencyRepo; + + public ZfclglService(ZfclglRepository zfclglRep, + AgencyRepository agencyRepo) { + this.zfclglRep = zfclglRep; + this.agencyRepo = agencyRepo; + } + + + public List list(ZfclglQuery query) { + return zfclglRep.findAll(buildQueryCondition(query)); + } + + + public Page page(ZfclglQuery query, RemoteUserInfo user) { + Integer _psize = Optional.ofNullable(query.pageSize()).filter(f -> f > 0).orElse(20); + Integer _page = Optional.ofNullable(query.page()).filter(f -> f > 0).map(f -> f - 1).orElse(0); + String _sort = Optional.ofNullable(query.sort()).filter(com.aisino.iles.common.util.StringUtils::isNotEmpty).orElse(Zfclgl_.GZSJ); + String _dir = Optional.ofNullable(query.dir()).filter(d -> Sort.Direction.fromOptionalString(d).isPresent()).orElse("desc"); + + return zfclglRep.findAll(buildQueryCondition(query), PageRequest.of(_page, _psize, Sort.by(Sort.Direction.fromString(_dir), _sort))).map(this::getZfclglInfo); + } + + private Zfclgl getZfclglInfo(Zfclgl zfclgl) { + return zfclgl; + } + + /** + * 动态查询条件构建 + */ + private Specification buildQueryCondition(ZfclglQuery query) { + return (root, criteriaQuery, criteriaBuilder) -> { + Set predicates = new LinkedHashSet<>(); + // 车辆类型代码 + Optional.ofNullable(query.getCllxdm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zfclgl_.cllxdm), o))); + // 车牌号 + Optional.ofNullable(query.getCph()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.like(root.get(Zfclgl_.cph), "%" + o + "%"))); + // 属地代码 + if (null != query.getAgency()) { + query.setSddm(query.getAgency().getAgencyCode()); + Optional.ofNullable(query.getSddm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zfclgl_.sddm), o))); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } + + /** + * 新增 + */ + @Transactional + public Zfclgl save(Zfclgl zfclgl, RemoteUserInfo user) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(zfclgl.getCllxdm())) { + if ("1".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("轿车"); + } else if ("2".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("SUV"); + } else if ("3".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("MPV"); + } else if ("4".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("载货汽车"); + } else if ("5".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("挂车"); + } else if ("6".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("摩托车"); + } else if ("7".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("自卸汽车"); + } else if ("8".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("牵引汽车"); + } else if ("8".equals(zfclgl.getCllxdm())) { + zfclgl.setCllx("救护车"); + } + } + if (null != zfclgl.getAgency()) { + zfclgl.setSddm(zfclgl.getAgency().getAgencyCode()); // 属地代码 + zfclgl.setSdmc(zfclgl.getAgency().getAgencyName()); // 属地名称 + } + return zfclglRep.save(zfclgl); + } + + /** + * 修改 + */ + @Transactional + public Zfclgl modify(String zfclglid, Zfclgl zfclgl, RemoteUserInfo user) { + zfclglRep.findById(zfclglid).ifPresent(z -> { + BeanUtils.copyProperties(zfclgl, z); + if (org.apache.commons.lang3.StringUtils.isNotBlank(z.getCllxdm())) { + if ("1".equals(z.getCllxdm())) { + z.setCllx("轿车"); + } else if ("2".equals(z.getCllxdm())) { + z.setCllx("SUV"); + } else if ("3".equals(z.getCllxdm())) { + z.setCllx("MPV"); + } else if ("4".equals(z.getCllxdm())) { + z.setCllx("载货汽车"); + } else if ("5".equals(z.getCllxdm())) { + z.setCllx("挂车"); + } else if ("6".equals(z.getCllxdm())) { + z.setCllx("摩托车"); + } else if ("7".equals(z.getCllxdm())) { + z.setCllx("自卸汽车"); + } else if ("8".equals(z.getCllxdm())) { + z.setCllx("牵引汽车"); + } else if ("8".equals(z.getCllxdm())) { + z.setCllx("救护车"); + } + } + if (null != z.getAgency()) { + z.setSddm(z.getAgency().getAgencyCode()); // 属地代码 + z.setSdmc(z.getAgency().getAgencyName()); // 属地名称 + } + }); + return zfclgl; + } + + /** + * 删除 + */ + @Transactional + public void remove(@Validated @NotNull String zfclglid, RemoteUserInfo user) { + zfclglRep.deleteById(zfclglid); + } + + /** + * 单条查询 + */ + public Optional findOne(@Validated @NotNull String zfclglid) { + return zfclglRep.findById(zfclglid); + } + + public Long count() { + return zfclglRep.count(); + } + + public List zfclList(ZfclglQuery query, RemoteUserInfo user) { + return zfclglRep.findAll(buildQueryCondition(query)); + } + + public Page page2(ZfclglQuery query, RemoteUserInfo user) { + Integer _psize = Optional.ofNullable(query.pageSize()).filter(f -> f > 0).orElse(20); + Integer _page = Optional.ofNullable(query.page()).filter(f -> f > 0).map(f -> f - 1).orElse(0); + String _sort = Optional.ofNullable(query.sort()).filter(com.aisino.iles.common.util.StringUtils::isNotEmpty).orElse(Zfclgl_.GZSJ); + String _dir = Optional.ofNullable(query.dir()).filter(d -> Sort.Direction.fromOptionalString(d).isPresent()).orElse("desc"); + return zfclglRep.findAll(buildQueryCondition2(query, user), PageRequest.of(_page, _psize, Sort.by(Sort.Direction.fromString(_dir), _sort))).map(this::getZfclglInfo); + } + + private Specification buildQueryCondition2(ZfclglQuery query, RemoteUserInfo user) { + return (root, criteriaQuery, criteriaBuilder) -> { + Set predicates = new LinkedHashSet<>(); + // 车辆类型代码 + Optional.ofNullable(query.getCllxdm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zfclgl_.cllxdm), o))); + // 车牌号 + Optional.ofNullable(query.getCph()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.like(root.get(Zfclgl_.cph), "%" + o + "%"))); + // 属地代码 + Agency currentAgency = agencyRepo.findByAgencyCode(user.getGajgjgdm()).orElseThrow(() -> new RuntimeException("当前用户机构数据错误,请检查!")); + if (currentAgency.getAgencyLevel() == 3) { + predicates.add(criteriaBuilder.equal(root.get(Zfclgl_.sddm), currentAgency.getAgencyCode())); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } + +} diff --git a/server/src/main/java/com/aisino/iles/lawenforcement/service/ZfzbglService.java b/server/src/main/java/com/aisino/iles/lawenforcement/service/ZfzbglService.java new file mode 100644 index 0000000..11ccf2b --- /dev/null +++ b/server/src/main/java/com/aisino/iles/lawenforcement/service/ZfzbglService.java @@ -0,0 +1,180 @@ +package com.aisino.iles.lawenforcement.service; + +import com.aisino.iles.common.util.BeanUtils; +import com.aisino.iles.core.model.UserType_; +import com.aisino.iles.lawenforcement.model.*; +import com.aisino.iles.lawenforcement.model.dto.ZfzbglStatisticsDto; +import com.aisino.iles.lawenforcement.model.query.ZfzbglQuery; +import com.aisino.iles.lawenforcement.repository.*; +import com.smartlx.sso.client.model.RemoteUserInfo; +import jakarta.persistence.criteria.Predicate; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import java.util.*; + +/** + * 执法装备管理 + */ +@Slf4j +@Service +public class ZfzbglService { + + private final ZfzbglRepository zfzbglRepository; + private final EquipmentHistoryVideoRepository equipmentHistoryVideoRepository; + + public ZfzbglService(ZfzbglRepository zfzbglRepository,EquipmentHistoryVideoRepository equipmentHistoryVideoRepository) { + this.zfzbglRepository = zfzbglRepository; + this.equipmentHistoryVideoRepository = equipmentHistoryVideoRepository; + } + + + public List list(ZfzbglQuery query) { + return zfzbglRepository.findAll(buildQueryCondition(query)); + } + + + public Page page(ZfzbglQuery query, RemoteUserInfo user) { + Integer _psize = Optional.ofNullable(query.pageSize()).filter(f -> f > 0).orElse(20); + Integer _page = Optional.ofNullable(query.page()).filter(f -> f > 0).map(f -> f - 1).orElse(0); + String _sort = Optional.ofNullable(query.sort()).filter(com.aisino.iles.common.util.StringUtils::isNotEmpty).orElse(Zfzbgl_.GZSJ); + String _dir = Optional.ofNullable(query.dir()).filter(d -> Sort.Direction.fromOptionalString(d).isPresent()).orElse("desc"); + + return zfzbglRepository.findAll(buildQueryCondition(query), PageRequest.of(_page, _psize, Sort.by(Sort.Direction.fromString(_dir), _sort))); + } + + /** + * 动态查询条件构建 + */ + private Specification buildQueryCondition(ZfzbglQuery query) { + return (root, criteriaQuery, criteriaBuilder) -> { + Set predicates = new LinkedHashSet<>(); + // 装备类型代码 + Optional.ofNullable(query.getZblxdm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zfzbgl_.zblxdm), o))); + // 使用人 + Optional.ofNullable(query.getSyr()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.like(root.get(Zfzbgl_.syr), "%" + o + "%"))); + // 属地代码 + if (null!=query.getAgency()) { + query.setSddm(query.getAgency().getAgencyCode()); + Optional.ofNullable(query.getSddm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zfzbgl_.sddm), o))); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } + + /** + * 新增 + */ + @Transactional + public Zfzbgl save(Zfzbgl zfzbgl, RemoteUserInfo user) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(zfzbgl.getZblxdm())) { + if ("1".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("个体防护"); + } else if ("2".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("执法保障"); + } else if ("3".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("执法过程"); + } else if ("4".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("测量侦检"); + } else if ("5".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("矿山执法"); + } else if ("6".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("危化品执法"); + } else if ("7".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("执法记录仪"); + } else if ("8".equals(zfzbgl.getZblxdm())) { + zfzbgl.setZblx("对讲机"); + } + } + if (null!=zfzbgl.getAgency()) { + zfzbgl.setSddm(zfzbgl.getAgency().getAgencyCode()); // 属地代码 + zfzbgl.setSdmc(zfzbgl.getAgency().getAgencyName()); // 属地名称 + } + return zfzbglRepository.save(zfzbgl); + } + + /** + * 修改 + */ + @Transactional + public Zfzbgl modify(Zfzbgl zfzbgl, RemoteUserInfo user) { + zfzbglRepository.findById(zfzbgl.getZfzbglid()).ifPresent(z -> { + BeanUtils.copyProperties(zfzbgl, z); + if (org.apache.commons.lang3.StringUtils.isNotBlank(z.getZblxdm())) { + if ("1".equals(z.getZblxdm())) { + z.setZblx("个体防护"); + } else if ("2".equals(z.getZblxdm())) { + z.setZblx("执法保障"); + } else if ("3".equals(z.getZblxdm())) { + z.setZblx("执法过程"); + } else if ("4".equals(z.getZblxdm())) { + z.setZblx("测量侦检"); + } else if ("5".equals(z.getZblxdm())) { + z.setZblx("矿山执法"); + } else if ("6".equals(z.getZblxdm())) { + z.setZblx("危化品执法"); + } else if ("7".equals(z.getZblxdm())) { + z.setZblx("执法记录仪"); + } else if ("8".equals(z.getZblxdm())) { + z.setZblx("对讲机"); + } + } + if (null!=z.getAgency()) { + z.setSddm(z.getAgency().getAgencyCode()); // 属地代码 + z.setSdmc(z.getAgency().getAgencyName()); // 属地名称 + } + }); + return zfzbgl; + } + + /** + * 删除 + */ + @Transactional + public void remove(@Validated @NotNull String zfzbglid, RemoteUserInfo user) { + zfzbglRepository.deleteById(zfzbglid); + } + + /** + * 单条查询 + */ + public Optional findOne(@Validated @NotNull String zfzbglid) { + Optional zfzbgl = zfzbglRepository.findById(zfzbglid); + if (zfzbgl.get().getZblxdm().equals("7") || zfzbgl.get().getZblxdm().equals("8")) { + List videos = equipmentHistoryVideoRepository.findByZbdm(zfzbgl.get().getSbbm()); + zfzbgl.get().setVideos(videos); + } + return zfzbgl; + } + + + /** + * 首页-执法装备分类统计 + */ + public List syStatistics(ZfzbglQuery query, RemoteUserInfo user) { + List allCodes = List.of("1", "2", "3", "4", "5", "6", "7", "8"); + List list = zfzbglRepository.syStatistics(); + // 创建结果列表,初始包含原始数据 + List result = new ArrayList<>(list); + // 检查每个代码是否存在 + for (String code : allCodes) { + boolean exists = list.stream().anyMatch(dto -> dto.getZblxdm() != null && dto.getZblxdm().equals(code)); + // 如果不存在,创建并添加一个数量为0的DTO + if (!exists) { + ZfzbglStatisticsDto newDto = new ZfzbglStatisticsDto(); + newDto.setZblxdm(code); + newDto.setNums(0L); + result.add(newDto); + } + } + return result; + } + +} diff --git a/server/src/main/java/com/aisino/iles/lawenforcement/service/ZsfzglService.java b/server/src/main/java/com/aisino/iles/lawenforcement/service/ZsfzglService.java new file mode 100644 index 0000000..66dacce --- /dev/null +++ b/server/src/main/java/com/aisino/iles/lawenforcement/service/ZsfzglService.java @@ -0,0 +1,142 @@ +package com.aisino.iles.lawenforcement.service; + +import com.aisino.iles.common.util.BeanUtils; +import com.aisino.iles.lawenforcement.model.Zsfzgl; +import com.aisino.iles.lawenforcement.model.Zsfzgl_; +import com.aisino.iles.lawenforcement.model.query.ZsfzglQuery; +import com.aisino.iles.lawenforcement.repository.ZsfzglRepository; +import com.smartlx.sso.client.model.RemoteUserInfo; +import jakarta.persistence.criteria.Predicate; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; + +import java.util.*; + +/** + * 执法装备管理 + */ +@Slf4j +@Service +public class ZsfzglService { + + private final ZsfzglRepository zsfzglRepository; + + public ZsfzglService(ZsfzglRepository zsfzglRepository) { + this.zsfzglRepository = zsfzglRepository; + } + + + public List list(ZsfzglQuery query) { + return zsfzglRepository.findAll(buildQueryCondition(query)); + } + + + public Page page(ZsfzglQuery query, RemoteUserInfo user) { + Integer _psize = Optional.ofNullable(query.pageSize()).filter(f -> f > 0).orElse(20); + Integer _page = Optional.ofNullable(query.page()).filter(f -> f > 0).map(f -> f - 1).orElse(0); + String _sort = Optional.ofNullable(query.sort()).filter(com.aisino.iles.common.util.StringUtils::isNotEmpty).orElse(Zsfzgl_.GZSJ); + String _dir = Optional.ofNullable(query.dir()).filter(d -> Sort.Direction.fromOptionalString(d).isPresent()).orElse("desc"); + + return zsfzglRepository.findAll(buildQueryCondition(query), PageRequest.of(_page, _psize, Sort.by(Sort.Direction.fromString(_dir), _sort))); + } + + /** + * 动态查询条件构建 + */ + private Specification buildQueryCondition(ZsfzglQuery query) { + return (root, criteriaQuery, criteriaBuilder) -> { + Set predicates = new LinkedHashSet<>(); + // 服装类型代码 + Optional.ofNullable(query.getFzlxdm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zsfzgl_.fzlxdm), o))); + // 姓名 + Optional.ofNullable(query.getName()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.like(root.get(Zsfzgl_.name), "%" + o + "%"))); + // 属地代码 + if (null!=query.getAgency()) { + query.setSddm(query.getAgency().getAgencyCode()); + Optional.ofNullable(query.getSddm()).filter(StringUtils::hasText).ifPresent(o -> predicates.add(criteriaBuilder.equal(root.get(Zsfzgl_.sddm), o))); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } + + /** + * 新增 + */ + @Transactional + public Zsfzgl save(Zsfzgl zsfzgl, RemoteUserInfo user) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(zsfzgl.getFzlxdm())) { + if ("1".equals(zsfzgl.getFzlxdm())) { + zsfzgl.setFzlx("常服"); + } else if ("2".equals(zsfzgl.getFzlxdm())) { + zsfzgl.setFzlx("执勤服"); + } else if ("3".equals(zsfzgl.getFzlxdm())) { + zsfzgl.setFzlx("夏装制式衬衣"); + } else if ("4".equals(zsfzgl.getFzlxdm())) { + zsfzgl.setFzlx("单裤、裙子"); + } else if ("5".equals(zsfzgl.getFzlxdm())) { + zsfzgl.setFzlx("防寒服"); + } + } + if (null!=zsfzgl.getAgency()) { + zsfzgl.setSddm(zsfzgl.getAgency().getAgencyCode()); // 属地代码 + zsfzgl.setSdmc(zsfzgl.getAgency().getAgencyName()); // 属地名称 + } + return zsfzglRepository.save(zsfzgl); + } + + /** + * 修改 + */ + @Transactional + public Zsfzgl modify(String zsfzglid, Zsfzgl zsfzgl, RemoteUserInfo user) { + zsfzglRepository.findById(zsfzglid).ifPresent(z -> { + BeanUtils.copyProperties(zsfzgl, z); + if (org.apache.commons.lang3.StringUtils.isNotBlank(z.getFzlxdm())) { + if ("1".equals(z.getFzlxdm())) { + z.setFzlx("常服"); + } else if ("2".equals(z.getFzlxdm())) { + z.setFzlx("执勤服"); + } else if ("3".equals(z.getFzlxdm())) { + z.setFzlx("夏装制式衬衣"); + } else if ("4".equals(z.getFzlxdm())) { + z.setFzlx("单裤、裙子"); + } else if ("5".equals(z.getFzlxdm())) { + z.setFzlx("防寒服"); + } + } + if (null!=z.getAgency()) { + z.setSddm(z.getAgency().getAgencyCode()); // 属地代码 + z.setSdmc(z.getAgency().getAgencyName()); // 属地名称 + } + }); + return zsfzgl; + } + + /** + * 删除 + */ + @Transactional + public void remove(@Validated @NotNull String zsfzglid, RemoteUserInfo user) { + zsfzglRepository.deleteById(zsfzglid); + } + + /** + * 单条查询 + */ + public Optional findOne(@Validated @NotNull String zsfzglid) { + return zsfzglRepository.findById(zsfzglid); + } + + public Long count() { + return zsfzglRepository.count(); + } + +}