From 58a39b259eadc0a9f33e4c2e91e6a649424fefda Mon Sep 17 00:00:00 2001 From: lzq Date: Tue, 30 Sep 2025 17:44:14 +0800 Subject: [PATCH] 1 --- .../mp/support/handler/j/JsonTypeHandler.java | 10 +- .../support/ReusableHttpServletRequest.java | 3 + .../permission/PermissionManager.java | 11 +- .../PermissionSecurityMetaDataSource.java | 2 +- .../TokenSecurityContextRepository.java | 3 +- .../biz/pojo/entity/BizCompanyEntity.java | 7 + .../biz/pojo/param/AddBizCompanyParam.java | 5 +- .../biz/service/BizTruckService.java | 24 ++ .../service/TruckLocationTrackService.java | 2 +- .../bs/controller/StatisticsController.java | 15 +- .../mapper/SupervisionStatisticsMapper.java | 31 +++ .../bs/service/ShouJuStatisticsService.java | 1 + .../service/SupervisionStatisticsService.java | 213 +++++++++++++++- .../customer/mapper/CustomerMapper.java | 2 +- .../pojo/result/SearchCompanyResult.java | 1 + .../service/DeviceLocalizerService.java | 5 +- .../order/service/OrderInfoService.java | 27 +- .../user/pojo/param/UserRegisterParam.java | 5 +- .../pojo/result/UserAccountDetailResult.java | 4 + .../src/main/resources/application-dev.yml | 12 +- .../src/main/resources/application.yml | 1 + .../resources/mapper/biz/BizCompanyMapper.xml | 5 +- .../mapper/bs/SupervisionStatisticsMapper.xml | 232 ++++++++++++++++++ .../mapper/customer/CustomerMapper.xml | 3 +- .../mapper/order/OrderInfoMapper.xml | 25 +- .../mapper/station/StationManageMapper.xml | 4 +- 26 files changed, 598 insertions(+), 55 deletions(-) diff --git a/njzscloud-common/njzscloud-common-mp/src/main/java/com/njzscloud/common/mp/support/handler/j/JsonTypeHandler.java b/njzscloud-common/njzscloud-common-mp/src/main/java/com/njzscloud/common/mp/support/handler/j/JsonTypeHandler.java index dc84948..84b09a8 100644 --- a/njzscloud-common/njzscloud-common-mp/src/main/java/com/njzscloud/common/mp/support/handler/j/JsonTypeHandler.java +++ b/njzscloud-common/njzscloud-common-mp/src/main/java/com/njzscloud/common/mp/support/handler/j/JsonTypeHandler.java @@ -28,21 +28,25 @@ public class JsonTypeHandler implements TypeHandler { } + private static Object getResult(String result) { + return StrUtil.isBlank(result) || !result.startsWith("{") || !result.startsWith("[") ? result : Fastjson.toBean(result, Object.class); + } + @Override public Object getResult(ResultSet rs, String columnName) throws SQLException { String result = rs.getString(columnName); - return StrUtil.isBlank(result) ? null : Fastjson.toBean(result, Object.class); + return getResult(result); } @Override public Object getResult(ResultSet rs, int columnIndex) throws SQLException { String result = rs.getString(columnIndex); - return StrUtil.isBlank(result) ? null : Fastjson.toBean(result, Object.class); + return getResult(result); } @Override public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { String result = cs.getString(columnIndex); - return StrUtil.isBlank(result) ? null : Fastjson.toBean(result, Object.class); + return getResult(result); } } diff --git a/njzscloud-common/njzscloud-common-mvc/src/main/java/com/njzscloud/common/mvc/support/ReusableHttpServletRequest.java b/njzscloud-common/njzscloud-common-mvc/src/main/java/com/njzscloud/common/mvc/support/ReusableHttpServletRequest.java index 17758df..6c65974 100644 --- a/njzscloud-common/njzscloud-common-mvc/src/main/java/com/njzscloud/common/mvc/support/ReusableHttpServletRequest.java +++ b/njzscloud-common/njzscloud-common-mvc/src/main/java/com/njzscloud/common/mvc/support/ReusableHttpServletRequest.java @@ -61,6 +61,9 @@ public class ReusableHttpServletRequest extends HttpServletRequestWrapper { body = StrUtil.isBlank(body) ? "无" : body; } } + if (requestURI.contains("/station/letter")) { + return; + } log.info("接口:{} {}\n请求头:{}\n请求参数:{}\n请求体:{}", method, requestURI, headerMap.isEmpty() ? "无" : Jackson.toJsonStr(headerMap), parameterMap.isEmpty() ? "无" : Jackson.toJsonStr(parameterMap), body); } catch (Throwable e) { diff --git a/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionManager.java b/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionManager.java index 84b6536..4f34013 100644 --- a/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionManager.java +++ b/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionManager.java @@ -3,7 +3,6 @@ package com.njzscloud.common.security.permission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; -import com.njzscloud.common.core.jackson.Jackson; import com.njzscloud.common.security.contant.Constants; import com.njzscloud.common.security.contant.EndpointAccessModel; import com.njzscloud.common.security.ex.ForbiddenAccessException; @@ -51,7 +50,7 @@ public abstract class PermissionManager { * 初始化本地权限缓存 */ public final void init() { - if (log.isDebugEnabled()) log.debug("初始化本地权限缓存"); + // if (log.isDebugEnabled()) log.debug("初始化本地权限缓存"); if (CollUtil.isEmpty(PERMISSION_CACHE)) { try { PERMISSION_CACHE_LOCK.lock(); @@ -63,14 +62,14 @@ public abstract class PermissionManager { PERMISSION_CACHE_LOCK.unlock(); } } - if (log.isDebugEnabled()) log.debug("已初始化无需操作"); + // if (log.isDebugEnabled()) log.debug("已初始化无需操作"); } /** * 加载权限 */ private void load0() { - if (log.isDebugEnabled()) log.debug("开始加载权限"); + // if (log.isDebugEnabled()) log.debug("开始加载权限"); List rolePermissions = load(); @@ -107,9 +106,7 @@ public abstract class PermissionManager { FORBIDDEN_CACHE = forbiddenSet; PERMISSION_CACHE = permissionMap; - if (log.isDebugEnabled()) { - log.debug("本地权限缓存已加载:\n{}", Jackson.toJsonStr(this.getAllRelation())); - } + // if (log.isDebugEnabled()) log.debug("本地权限缓存已加载:\n{}", Jackson.toJsonStr(this.getAllRelation())); } /** diff --git a/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionSecurityMetaDataSource.java b/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionSecurityMetaDataSource.java index dece0ac..1982ef0 100644 --- a/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionSecurityMetaDataSource.java +++ b/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/permission/PermissionSecurityMetaDataSource.java @@ -32,7 +32,7 @@ public class PermissionSecurityMetaDataSource implements FilterInvocationSecurit String endpoint = method.toUpperCase() + " " + requestURI; Assert.notEmpty(permission, () -> new MissingPermissionException(StrUtil.format("请求: 【{}】 未指定权限", endpoint))); - if (log.isDebugEnabled()) log.debug("允许访问接口:【{}】的角色:【{}】", endpoint, permission); + // if (log.isDebugEnabled()) log.debug("允许访问接口:【{}】的角色:【{}】", endpoint, permission); return permission; } diff --git a/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/support/TokenSecurityContextRepository.java b/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/support/TokenSecurityContextRepository.java index 40ff68e..1807f1b 100644 --- a/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/support/TokenSecurityContextRepository.java +++ b/njzscloud-common/njzscloud-common-security/src/main/java/com/njzscloud/common/security/support/TokenSecurityContextRepository.java @@ -2,7 +2,6 @@ package com.njzscloud.common.security.support; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; -import com.njzscloud.common.core.jackson.Jackson; import com.njzscloud.common.security.contant.Constants; import com.njzscloud.common.security.util.SecurityUtil; import lombok.extern.slf4j.Slf4j; @@ -92,7 +91,7 @@ public class TokenSecurityContextRepository implements SecurityContextRepository userDetail = Constants.ANONYMOUS_USER; } - log.info("当前登录人信息:{}", Jackson.toJsonStr(userDetail)); + // log.info("当前登录人信息:{}", Jackson.toJsonStr(userDetail)); SecurityContext context = SecurityContextHolder.createEmptyContext(); AuthenticationDetails details = AuthenticationDetails.create(request); diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/entity/BizCompanyEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/entity/BizCompanyEntity.java index 54d135e..8f7d699 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/entity/BizCompanyEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/entity/BizCompanyEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.supervisory.biz.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.common.mp.support.handler.j.JsonTypeHandler; import com.njzscloud.supervisory.biz.constant.AuditStatus; import com.njzscloud.supervisory.biz.constant.BizObj; import lombok.Getter; @@ -9,6 +10,7 @@ import lombok.experimental.Accessors; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; /** * 企业信息 @@ -69,11 +71,16 @@ public class BizCompanyEntity { */ private LocalDate licenseEndTime; + /** * 法人名称 */ private String legalRepresentative; + @TableField(typeHandler = JsonTypeHandler.class) + private List idcard; + private LocalDate idcardStartTime; + private LocalDate idcardEndTime; /** * 省; 代码 */ diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/param/AddBizCompanyParam.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/param/AddBizCompanyParam.java index 56b9060..48da68a 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/param/AddBizCompanyParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/pojo/param/AddBizCompanyParam.java @@ -7,6 +7,7 @@ import lombok.ToString; import lombok.experimental.Accessors; import java.time.LocalDate; +import java.util.List; /** * 企业信息 @@ -56,7 +57,9 @@ public class AddBizCompanyParam { * 法人名称 */ private String legalRepresentative; - + private List idcard; + private LocalDate idcardStartTime; + private LocalDate idcardEndTime; /** * 省; 代码 */ diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/BizTruckService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/BizTruckService.java index bcbf0c5..57283f4 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/BizTruckService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/BizTruckService.java @@ -19,7 +19,10 @@ import com.njzscloud.supervisory.biz.pojo.entity.BizTruckEntity; import com.njzscloud.supervisory.biz.pojo.param.SearchTruckParam; import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult; import com.njzscloud.supervisory.biz.pojo.result.SearchTruckResult; +import com.njzscloud.supervisory.device.pojo.entity.DeviceLocalizerEntity; +import com.njzscloud.supervisory.device.service.DeviceLocalizerService; import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,15 +34,27 @@ import java.util.List; */ @Slf4j @Service +@RequiredArgsConstructor public class BizTruckService extends ServiceImpl implements IService { + private final DeviceLocalizerService deviceLocalizerService; + /** * 新增 * * @param bizTruckEntity 数据 */ + @Transactional(rollbackFor = Exception.class) public void add(BizTruckEntity bizTruckEntity) { bizTruckEntity.setAuditStatus(AuditStatus.DaiShenHe); + String gps = bizTruckEntity.getGps(); + if (StrUtil.isNotBlank(gps)) { + long count = deviceLocalizerService.count(Wrappers.query().eq("terminal_id", gps)); + if (count == 0) { + deviceLocalizerService.add(new DeviceLocalizerEntity().setTerminalId(gps)); + deviceLocalizerService.onApplicationReady(); + } + } this.save(bizTruckEntity); } @@ -48,10 +63,19 @@ public class BizTruckService extends ServiceImpl * * @param bizTruckEntity 数据 */ + @Transactional(rollbackFor = Exception.class) public void modify(BizTruckEntity bizTruckEntity) { this.updateById(bizTruckEntity .setAuditStatus(AuditStatus.DaiShenHe) ); + BizTruckEntity bizTruck = this.getById(bizTruckEntity.getId()); + String gps = bizTruck.getGps(); + if (StrUtil.isNotBlank(gps)) { + long count = deviceLocalizerService.count(Wrappers.query().eq("terminal_id", gps)); + if (count == 0) { + deviceLocalizerService.add(new DeviceLocalizerEntity().setTerminalId(gps)); + } + } } /** diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/TruckLocationTrackService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/TruckLocationTrackService.java index f2d824e..fe09a14 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/TruckLocationTrackService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/biz/service/TruckLocationTrackService.java @@ -389,7 +389,7 @@ public class TruckLocationTrackService extends ServiceImpl emitterList = emitters.get(gpsId); lock.unlock(); if (CollUtil.isEmpty(emitterList)) { - log.info("未找到GPS {} 的实时数据订阅者", gpsId); + // log.info("未找到GPS {} 的实时数据订阅者", gpsId); return; } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/controller/StatisticsController.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/controller/StatisticsController.java index d6f5888..85f467b 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/controller/StatisticsController.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/controller/StatisticsController.java @@ -5,10 +5,7 @@ import com.njzscloud.supervisory.bs.service.StatisticsService; import com.njzscloud.supervisory.bs.service.SupervisionStatisticsService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Map; @@ -24,7 +21,7 @@ public class StatisticsController { @GetMapping("/obtain_data") public R obtainData() throws Exception { - long l = System.currentTimeMillis(); + // long l = System.currentTimeMillis(); Map data = statisticsService.obtainData(); return R.success(data); } @@ -36,9 +33,15 @@ public class StatisticsController { @GetMapping("/supervision/obtain_data") public R obtainData1() { - long l = System.currentTimeMillis(); + // long l = System.currentTimeMillis(); Map data = supervisionStatisticsService.obtainData(); return R.success(data); } + + @GetMapping("/first_page") + public R> firstPage(@RequestParam(value = "trendStatisticsType", required = false, defaultValue = "1") Integer trendStatisticsType) { + return R.success(supervisionStatisticsService.firstPage(trendStatisticsType)); + } + } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/mapper/SupervisionStatisticsMapper.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/mapper/SupervisionStatisticsMapper.java index ff67fe3..e43b644 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/mapper/SupervisionStatisticsMapper.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/mapper/SupervisionStatisticsMapper.java @@ -2,8 +2,10 @@ package com.njzscloud.supervisory.bs.mapper; import com.njzscloud.supervisory.bs.pojo.result.*; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; @Mapper public interface SupervisionStatisticsMapper { @@ -27,4 +29,33 @@ public interface SupervisionStatisticsMapper { List getProjects(); + @SuppressWarnings("MybatisXMapperMethodInspection") + Map dataStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + List> warnTruck(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + Map truckStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + List> projectStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + List> trendStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime); + + @SuppressWarnings("MybatisXMapperMethodInspection") + List> categoryStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + Map orderStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + Map weightStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + Map userStatistics(); + + @SuppressWarnings("MybatisXMapperMethodInspection") + List> dataTable(); } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/ShouJuStatisticsService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/ShouJuStatisticsService.java index d9717ea..2cc5198 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/ShouJuStatisticsService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/ShouJuStatisticsService.java @@ -320,4 +320,5 @@ public class ShouJuStatisticsService implements StatisticsService { public List obtainOrder(Long userId) { return statisticsMapper.obtainOrder(userId); } + } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/SupervisionStatisticsService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/SupervisionStatisticsService.java index 3badfb2..985c8e2 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/SupervisionStatisticsService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/bs/service/SupervisionStatisticsService.java @@ -1,15 +1,23 @@ package com.njzscloud.supervisory.bs.service; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; +import com.njzscloud.common.core.ex.Exceptions; +import com.njzscloud.common.core.utils.GroupUtil; import com.njzscloud.supervisory.bs.mapper.SupervisionStatisticsMapper; import com.njzscloud.supervisory.bs.pojo.result.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Slf4j @Service @@ -17,6 +25,17 @@ import java.util.Map; public class SupervisionStatisticsService { private final SupervisionStatisticsMapper supervisionStatisticsMapper; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( + 50, + 200, + 0L, + TimeUnit.MILLISECONDS, + new ArrayBlockingQueue<>(1000), + (r, executor) -> { + throw Exceptions.exception("服务器繁忙"); + } + ); + public Map obtainData() { DispatchSummary dispatchSummary = supervisionStatisticsMapper.getDispatchSummary(); @@ -47,4 +66,192 @@ public class SupervisionStatisticsService { .build(); } + public Map firstPage(Integer trendStatisticsType) { + CompletableFuture> dataStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::dataStatistics, threadPoolExecutor) + .thenApply(dataStatistics -> { + Double todayTotalWeight = MapUtil.getDouble(dataStatistics, "todayTotalWeight", 0.0); + Double yesterdayTotalWeight = MapUtil.getDouble(dataStatistics, "yesterdayTotalWeight", 0.0); + Double dayRate = yesterdayTotalWeight == 0 ? 100 : (todayTotalWeight - yesterdayTotalWeight) / yesterdayTotalWeight * 100; + + Double currentMonthTotalWeight = MapUtil.getDouble(dataStatistics, "currentMonthTotalWeight", 0.0); + Double lastMonthTotalWeight = MapUtil.getDouble(dataStatistics, "lastMonthTotalWeight", 0.0); + Double monthRate = lastMonthTotalWeight == 0 ? 100 : (currentMonthTotalWeight - lastMonthTotalWeight) / lastMonthTotalWeight * 100; + + Double todayFinishCount = MapUtil.getDouble(dataStatistics, "todayFinishCount", 0.0); + Double todayTotalCount = MapUtil.getDouble(dataStatistics, "todayTotalCount", 0.0); + Double todayFinishRate = todayTotalCount == 0 ? 100 : todayFinishCount / todayTotalCount * 100; + + Double yesterdayFinishCount = MapUtil.getDouble(dataStatistics, "yesterdayFinishCount", 0.0); + // Double yesterdayTotalCount = MapUtil.getDouble(dataStatistics, "yesterdayTotalCount", 0.0); + // Double yesterdayFinishRate = yesterdayFinishCount == 0 ? 100 : yesterdayFinishCount / yesterdayTotalCount * 100; + Double incFinishRate = yesterdayFinishCount == 0 ? 100 : (todayFinishCount - yesterdayFinishCount) / yesterdayFinishCount * 100; + + Double todayWarnCount = MapUtil.getDouble(dataStatistics, "todayWarnCount", 0.0); + Double yesterdayWarnCount = MapUtil.getDouble(dataStatistics, "yesterdayWarnCount", 0.0); + Double warnRate = yesterdayWarnCount == 0 ? 100 : (todayWarnCount - yesterdayWarnCount) / yesterdayWarnCount * 100; + + dataStatistics.put("dayRate", dayRate); + dataStatistics.put("monthRate", monthRate); + dataStatistics.put("finishRate", todayFinishRate); + dataStatistics.put("incFinishRate", incFinishRate); + dataStatistics.put("warnRate", warnRate); + return dataStatistics; + }) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyMap(); + }); + + + CompletableFuture>> warnTruckFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::warnTruck, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyList(); + }); + + CompletableFuture> truckStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::truckStatistics, threadPoolExecutor) + .thenApply(truckStatistics -> { + Integer offlineCount = MapUtil.getInt(truckStatistics, "offlineCount", 0); + Integer totalCount = MapUtil.getInt(truckStatistics, "totalCount", 0); + truckStatistics.put("onlineCount", totalCount - offlineCount); + return truckStatistics; + }) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyMap(); + }); + + CompletableFuture>> projectStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::projectStatistics, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyList(); + }); + + CompletableFuture> trendStatisticsFuture = CompletableFuture.supplyAsync(() -> { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startTime = now.minusDays(7); + LocalDateTime endTime = LocalDateTime.now(); + + if (trendStatisticsType == 2) { + startTime = now.minusMonths(12); + } else if (trendStatisticsType == 3) { + startTime = now.minusYears(5); + } + List> maps = supervisionStatisticsMapper.trendStatistics(startTime.format(formatter), endTime.format(formatter)); + Map res = new HashMap<>(); + if (trendStatisticsType == 2) { + long months = ChronoUnit.MONTHS.between(startTime, endTime); + Map>> timepointMap = GroupUtil.k_a(maps, it -> { + String timepoint = MapUtil.getStr(it, "timepoint", ""); + return DateUtil.format(DateUtil.parseDate(timepoint), "yyyy-MM"); + }); + + for (long l = 0; l < months; l++) { + LocalDateTime localDateTime = startTime.plusMonths(l); + String month = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM")); + List> monthData = timepointMap.getOrDefault(month, Collections.emptyList()); + Optional weight = monthData.stream() + .map(it -> MapUtil.getInt(it, "weight", 0)) + .reduce(Integer::sum); + + res.put(month, weight.orElse(0) / 1000.0); + } + + } else if (trendStatisticsType == 3) { + long years = ChronoUnit.YEARS.between(startTime, endTime); + Map>> timepointMap = GroupUtil.k_a(maps, it -> { + String timepoint = MapUtil.getStr(it, "timepoint", ""); + return DateUtil.format(DateUtil.parseDate(timepoint), "yyyy"); + }); + + for (long l = 0; l < years; l++) { + LocalDateTime localDateTime = startTime.plusYears(l); + String year = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM")); + List> yearData = timepointMap.getOrDefault(year, Collections.emptyList()); + Optional weight = yearData.stream() + .map(it -> MapUtil.getInt(it, "weight", 0)) + .reduce(Integer::sum); + + res.put(year, weight.orElse(0) / 1000.0); + } + } else { + long days = ChronoUnit.DAYS.between(startTime, endTime); + Map>> timepointMap = GroupUtil.k_a(maps, it -> { + String timepoint = MapUtil.getStr(it, "timepoint", ""); + return DateUtil.format(DateUtil.parseDate(timepoint), "yyyy-MM-dd"); + }); + + for (long l = 0; l < days; l++) { + LocalDateTime localDateTime = startTime.plusYears(l); + String day = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + List> dayData = timepointMap.getOrDefault(day, Collections.emptyList()); + Optional weight = dayData.stream() + .map(it -> MapUtil.getInt(it, "weight", 0)) + .reduce(Integer::sum); + + res.put(day, weight.orElse(0) / 1000.0); + } + } + return res; + }, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyMap(); + }); + CompletableFuture>> categoryStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::categoryStatistics, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyList(); + }); + + CompletableFuture> orderStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::orderStatistics, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyMap(); + }); + + CompletableFuture> weightStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::weightStatistics, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyMap(); + }); + CompletableFuture> userStatisticsFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::userStatistics, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyMap(); + }); + CompletableFuture>> dataTableFuture = CompletableFuture.supplyAsync(supervisionStatisticsMapper::dataTable, threadPoolExecutor) + .exceptionally(ex -> { + log.error("数据获取失败", ex); + return Collections.emptyList(); + }); + + try { + Map dataStatistics = dataStatisticsFuture.get(); + List> warnTruck = warnTruckFuture.get(); + Map truckStatistics = truckStatisticsFuture.get(); + List> projectStatistics = projectStatisticsFuture.get(); + Map trendStatistics = trendStatisticsFuture.get(); + List> categoryStatistics = categoryStatisticsFuture.get(); + Map orderStatistics = orderStatisticsFuture.get(); + Map userStatistics = userStatisticsFuture.get(); + Map weightStatistics = weightStatisticsFuture.get(); + List> dataTable = dataTableFuture.get(); + return MapUtil.builder() + .put("dataStatistics", dataStatistics) + .put("warnTruck", warnTruck) + .put("truckStatistics", truckStatistics) + .put("projectStatistics", projectStatistics) + .put("trendStatistics", trendStatistics) + .put("categoryStatistics", categoryStatistics) + .put("orderStatistics", orderStatistics) + .put("userStatistics", userStatistics) + .put("weightStatistics", weightStatistics) + .put("dataTable", dataTable) + .build(); + } catch (Exception e) { + throw Exceptions.exception(e, "数据获取失败"); + } + } } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/mapper/CustomerMapper.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/mapper/CustomerMapper.java index c243592..1e89140 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/mapper/CustomerMapper.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/mapper/CustomerMapper.java @@ -12,7 +12,7 @@ import java.util.List; @Mapper public interface CustomerMapper { - IPage paging(@Param("page") Page page, @Param("ew") QueryWrapper ew); + IPage paging(Page page, @Param("ew") QueryWrapper ew); List shortBargeInfo(@Param("ew") QueryWrapper ew); } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/pojo/result/SearchCompanyResult.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/pojo/result/SearchCompanyResult.java index 2452dad..d783805 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/pojo/result/SearchCompanyResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/customer/pojo/result/SearchCompanyResult.java @@ -17,6 +17,7 @@ public class SearchCompanyResult { * 公司id */ private Long id; + private String username; /** * 统一社会信用代码 */ diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/device/service/DeviceLocalizerService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/device/service/DeviceLocalizerService.java index 0598733..529771d 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/device/service/DeviceLocalizerService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/device/service/DeviceLocalizerService.java @@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; +import java.util.stream.Collectors; /** * 定位器 @@ -70,8 +71,8 @@ public class DeviceLocalizerService extends ServiceImpl localizerEntities = this.list(); - for (DeviceLocalizerEntity localizerEntity : localizerEntities) { - String terminalId = localizerEntity.getTerminalId(); + List collect = localizerEntities.stream().map(DeviceLocalizerEntity::getTerminalId).distinct().collect(Collectors.toList()); + for (String terminalId : collect) { Mqtt.subscribe(terminalId + "/online", this::heartbeat); Mqtt.subscribe(terminalId + "/device_info", this::updateDeviceLocalizerStatus); Mqtt.subscribe(terminalId + "/track_location_real", truckLocationTrackService::sendRealTimeData); diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java index e3931b0..556f57b 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java @@ -709,23 +709,38 @@ public class OrderInfoService extends ServiceImpl Exceptions.clierr("订单不存在")); OrderStatus orderStatus = orderInfo.getOrderStatus(); Assert.isTrue(orderStatus == OrderStatus.YiYuYue || orderStatus == OrderStatus.DaiPaiDan - || orderStatus == OrderStatus.DaiJieDan - , () -> Exceptions.clierr("当前订单状态,无法取消")); + || orderStatus == OrderStatus.DaiJieDan, () -> Exceptions.clierr("当前订单状态,无法取消")); this.updateById(new OrderInfoEntity() .setId(orderInfo.getId()) .setOrderStatus(OrderStatus.YiQuXiao) ); + // TODO 关闭 GPS 定位 - Long truckId = orderInfo.getTruckId(); - BizTruckEntity truckInfo = baseMapper.getTruckInfo(truckId); - String gpsId = truckInfo.getGps(); - stopTuqiangTrack(gpsId); + CompletableFuture.runAsync(() -> { + Long truckId = orderInfo.getTruckId(); + if (truckId == null) { + return; + } + BizTruckEntity truckInfo = baseMapper.getTruckInfo(truckId); + if (truckInfo == null) { + return; + } + String gpsId = truckInfo.getGps(); + if (StrUtil.isBlank(gpsId)) { + return; + } + stopTuqiangTrack(gpsId); + }).exceptionally(ex -> { + log.error("数据获取失败", ex); + return null; + }); } @Transactional(rollbackFor = Exception.class) diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/param/UserRegisterParam.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/param/UserRegisterParam.java index 13bed28..0f6f94a 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/param/UserRegisterParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/param/UserRegisterParam.java @@ -7,6 +7,7 @@ import lombok.ToString; import lombok.experimental.Accessors; import java.time.LocalDate; +import java.util.List; @Getter @Setter @@ -114,7 +115,9 @@ public class UserRegisterParam { * 法人名称 */ private String legalRepresentative; - + private List idcard; + private LocalDate idcardStartTime; + private LocalDate idcardEndTime; /** * 省; 代码 */ diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/result/UserAccountDetailResult.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/result/UserAccountDetailResult.java index 5f65487..589d9cd 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/result/UserAccountDetailResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/sys/user/pojo/result/UserAccountDetailResult.java @@ -3,6 +3,8 @@ package com.njzscloud.supervisory.sys.user.pojo.result; import lombok.Getter; import lombok.Setter; +import java.time.LocalDateTime; + @Getter @Setter public class UserAccountDetailResult { @@ -24,6 +26,8 @@ public class UserAccountDetailResult { * 手机号 */ private String phone; + + private LocalDateTime regdate; /** * 微信 openid */ diff --git a/njzscloud-svr/src/main/resources/application-dev.yml b/njzscloud-svr/src/main/resources/application-dev.yml index 6d0c7f3..fa8340c 100644 --- a/njzscloud-svr/src/main/resources/application-dev.yml +++ b/njzscloud-svr/src/main/resources/application-dev.yml @@ -56,15 +56,15 @@ mybatis-plus: port: 33061 wechat: - app-id: wx3c06d9dd4e56c58d - app-secret: ff280a71a4c06fc2956178f8c472ef96 - # app-id: wx989ea47a5ddf9bfb - # app-secret: 66c98dc487a372acb4f1931b38fee8ff + # app-id: wx3c06d9dd4e56c58d + # app-secret: ff280a71a4c06fc2956178f8c472ef96 + app-id: wx989ea47a5ddf9bfb + app-secret: 66c98dc487a372acb4f1931b38fee8ff base-url: https://api.weixin.qq.com pay: # 子商户配置 - sub-app-id: wx3c06d9dd4e56c58d - # sub-app-id: wx989ea47a5ddf9bfb + # sub-app-id: wx3c06d9dd4e56c58d + sub-app-id: wx989ea47a5ddf9bfb sub-mch-id: 1900000100 # API密钥(32位字符串) api-key: your-32-character-api-key-here diff --git a/njzscloud-svr/src/main/resources/application.yml b/njzscloud-svr/src/main/resources/application.yml index b359469..1e11244 100644 --- a/njzscloud-svr/src/main/resources/application.yml +++ b/njzscloud-svr/src/main/resources/application.yml @@ -66,6 +66,7 @@ spring: logging: level: com.njzscloud.common.sichen.TaskMapper: off + com.njzscloud.supervisory.sys.stationletter: off com.njzscloud: debug mybatis-plus: diff --git a/njzscloud-svr/src/main/resources/mapper/biz/BizCompanyMapper.xml b/njzscloud-svr/src/main/resources/mapper/biz/BizCompanyMapper.xml index ff0301c..56a9ae0 100644 --- a/njzscloud-svr/src/main/resources/mapper/biz/BizCompanyMapper.xml +++ b/njzscloud-svr/src/main/resources/mapper/biz/BizCompanyMapper.xml @@ -47,7 +47,7 @@ create_time, modify_time, deleted, - open, + `open`, (6371 * ACOS(COS(RADIANS(lat)) * COS(RADIANS(#{lat})) * @@ -59,5 +59,8 @@ NULL distance FROM biz_company + WHERE deleted = 0 + AND `open` = 1 + AND station = 1 diff --git a/njzscloud-svr/src/main/resources/mapper/bs/SupervisionStatisticsMapper.xml b/njzscloud-svr/src/main/resources/mapper/bs/SupervisionStatisticsMapper.xml index d6a9001..7dbc7e0 100644 --- a/njzscloud-svr/src/main/resources/mapper/bs/SupervisionStatisticsMapper.xml +++ b/njzscloud-svr/src/main/resources/mapper/bs/SupervisionStatisticsMapper.xml @@ -142,4 +142,236 @@ ORDER BY g.create_time DESC LIMIT 10 + + + + + + + + + + + + diff --git a/njzscloud-svr/src/main/resources/mapper/customer/CustomerMapper.xml b/njzscloud-svr/src/main/resources/mapper/customer/CustomerMapper.xml index 0b136a3..e3204bd 100644 --- a/njzscloud-svr/src/main/resources/mapper/customer/CustomerMapper.xml +++ b/njzscloud-svr/src/main/resources/mapper/customer/CustomerMapper.xml @@ -4,11 +4,12 @@ + - + diff --git a/njzscloud-svr/src/main/resources/mapper/order/OrderInfoMapper.xml b/njzscloud-svr/src/main/resources/mapper/order/OrderInfoMapper.xml index 33f015c..8eb519b 100644 --- a/njzscloud-svr/src/main/resources/mapper/order/OrderInfoMapper.xml +++ b/njzscloud-svr/src/main/resources/mapper/order/OrderInfoMapper.xml @@ -17,8 +17,8 @@ a.audit_time, a.qu_audit_user_id, a.shi_audit_user_id, - n.nickname qu_audit_user_name, - o.nickname shi_audit_user_name, + n.nickname qu_audit_user_name, + o.nickname shi_audit_user_name, a.order_category, a.order_status, a.checker_id, @@ -81,7 +81,7 @@ e.carrying_capacity, e.tare_weight history_tare_weight, e.truck_category, - e.picture truck_picture, + e.picture truck_picture, f.driver_name, f.phone driver_phone, f.driving_licence, @@ -109,17 +109,17 @@ g.phone trans_phone, h.nickname, h.biz_obj, - h.phone user_phone, + h.phone user_phone, j.company_name, j.uscc, - k.nickname checker_name, + k.nickname checker_name, l.project_name, m.station_name, - m.company_name station_company_name, - m.address station_address, - m.uscc station_uscc, - m.contacts station_contacts, - m.phone station_phone, + m.company_name station_company_name, + m.address station_address, + m.uscc station_uscc, + m.contacts station_contacts, + m.phone station_phone, a.contacts, a.phone, a.expect_time, @@ -129,7 +129,10 @@ f.licence_start_time driver_licence_start_time, f.licence_end_time driver_licence_end_time, j.license_start_time trans_license_start_time, - j.license_end_time trans_license_start_time + j.license_end_time trans_license_start_time, + g.idcard trans_idcard, + g.idcard_start_time trans_idcard_start_time, + g.idcard_end_time trans_idcard_end_time FROM order_info a LEFT JOIN order_cargo_place b ON b.id = a.cargo_place_id LEFT JOIN order_goods c ON c.id = a.goods_id diff --git a/njzscloud-svr/src/main/resources/mapper/station/StationManageMapper.xml b/njzscloud-svr/src/main/resources/mapper/station/StationManageMapper.xml index 7fef466..3178bf7 100644 --- a/njzscloud-svr/src/main/resources/mapper/station/StationManageMapper.xml +++ b/njzscloud-svr/src/main/resources/mapper/station/StationManageMapper.xml @@ -57,7 +57,7 @@ b.phone, a.station_id, b.open, - b.company_name station_name + b.station_name FROM station_manage a INNER JOIN biz_company b ON b.id = a.station_id AND b.station = 1 AND b.deleted = 0 INNER JOIN sys_user c ON c.id = a.user_id AND c.deleted = 0 @@ -111,7 +111,7 @@ b.open, b.phone, b.id station_id, - b.company_name station_name + b.station_name FROM biz_company b INNER JOIN sys_user c ON c.id = 1 AND c.deleted = 0 WHERE b.station = 1