调整首页, 优化接口
This commit is contained in:
parent
c7da74d85b
commit
f4f5766eeb
@ -43,7 +43,6 @@ import org.springframework.util.StringUtils;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -231,13 +230,13 @@ public class LoginServiceImpl implements LoginService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void asyncIndexTask(){
|
private void asyncIndexTask(){
|
||||||
CompletableFuture<Void> asyncTask = CompletableFuture.runAsync(()->{
|
// CompletableFuture<Void> asyncTask = CompletableFuture.runAsync(()->{
|
||||||
try {
|
// try {
|
||||||
cloudService.loadIndexData();
|
// cloudService.loadIndexData();
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
log.error("异步处理首页数据异常:{}", e.getMessage());
|
// log.error("异步处理首页数据异常:{}", e.getMessage());
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
package com.evotech.hd.common.core.Dto.request.template;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类
|
||||||
|
*
|
||||||
|
* @ClassName:AlarmTemplateDto
|
||||||
|
* @date: 2025年05月05日 16:29
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class StopServerTemplateDto {
|
||||||
|
|
||||||
|
/***
|
||||||
|
* key 为 用户的wuid, value为用户的车牌号信息
|
||||||
|
*/
|
||||||
|
Map<String,String> plateNum;
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 站管理员的wuid
|
||||||
|
*/
|
||||||
|
List<String> adminWuId;
|
||||||
|
|
||||||
|
String stationName;
|
||||||
|
|
||||||
|
String reason;
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
package com.evotech.hd.common.core.Dto.result.home;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类
|
||||||
|
*
|
||||||
|
* @ClassName:HomeOrderInfo
|
||||||
|
* @date: 2025年05月08日 17:34
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(name = "首页换电订单信息")
|
||||||
|
public class HomeOrderInfo {
|
||||||
|
|
||||||
|
@Schema(description = "换电时间")
|
||||||
|
@JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private Date swapTime;
|
||||||
|
|
||||||
|
@Schema(description = "换电车辆")
|
||||||
|
private String swapCar;
|
||||||
|
|
||||||
|
@Schema(description = "换电人")
|
||||||
|
private String swapUserName;
|
||||||
|
|
||||||
|
@Schema(description = "换电金额")
|
||||||
|
private Double swapAmount;
|
||||||
|
|
||||||
|
}
|
||||||
@ -16,6 +16,8 @@ public class HomeOrderSwapBatteryAmountDto {
|
|||||||
|
|
||||||
Double amount;
|
Double amount;
|
||||||
|
|
||||||
|
Long dataCount;
|
||||||
|
|
||||||
Integer status;
|
Integer status;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,9 +24,9 @@ public class HomeOrderSwapBatteryHalfYearAmountDto {
|
|||||||
@Schema(description = "交易金额")
|
@Schema(description = "交易金额")
|
||||||
private Double totalMoney;
|
private Double totalMoney;
|
||||||
|
|
||||||
@Schema(description = "类型")
|
// @Schema(description = "类型")
|
||||||
private Integer status;
|
// private Integer status;
|
||||||
|
//
|
||||||
@Schema(description = "支付类型")
|
// @Schema(description = "支付类型")
|
||||||
private Integer payType;
|
// private Integer payType;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,8 @@ public class HomeOrderSwapBatteryProportionDto {
|
|||||||
String stationCode;
|
String stationCode;
|
||||||
@Schema(description = "换电站订单数量")
|
@Schema(description = "换电站订单数量")
|
||||||
Long quantity;
|
Long quantity;
|
||||||
@Schema(description = "订单类型")
|
|
||||||
Integer orderType;
|
// @Schema(description = "订单类型")
|
||||||
|
// Integer orderType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,14 +2,10 @@ package com.evotech.hd.common.core.dao.cloud;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.evotech.hd.common.core.Dto.request.HomeRequestDto;
|
import com.evotech.hd.common.core.Dto.request.HomeRequestDto;
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto;
|
import com.evotech.hd.common.core.Dto.result.home.*;
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto;
|
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearDto;
|
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto;
|
|
||||||
import com.evotech.hd.common.core.constant.HDConstant;
|
import com.evotech.hd.common.core.constant.HDConstant;
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||||
import com.evotech.hd.common.core.permission.DataScope;
|
import com.evotech.hd.common.core.permission.DataScope;
|
||||||
import com.evotech.hd.common.core.permission.DataScopeOpenMethod;
|
|
||||||
import com.evotech.hd.common.core.permission.DataScopes;
|
import com.evotech.hd.common.core.permission.DataScopes;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
@ -24,7 +20,7 @@ import java.util.List;
|
|||||||
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE),
|
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE),
|
||||||
@DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE),
|
@DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE),
|
||||||
})
|
})
|
||||||
@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"})
|
//@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"})
|
||||||
public interface OrderSwapBatteryDao extends BaseMapper<OrderSwapBattery> {
|
public interface OrderSwapBatteryDao extends BaseMapper<OrderSwapBattery> {
|
||||||
|
|
||||||
|
|
||||||
@ -34,10 +30,14 @@ public interface OrderSwapBatteryDao extends BaseMapper<OrderSwapBattery> {
|
|||||||
|
|
||||||
List<HomeOrderSwapBatteryHalfYearDto> homeFindHalfYearOrderData(@Param("params") HomeRequestDto params);
|
List<HomeOrderSwapBatteryHalfYearDto> homeFindHalfYearOrderData(@Param("params") HomeRequestDto params);
|
||||||
|
|
||||||
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE)
|
// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE)
|
||||||
List<HomeOrderSwapBatteryHalfYearAmountDto> homeFindHalfYearAmountData(@Param("params") HomeRequestDto params);
|
List<HomeOrderSwapBatteryHalfYearAmountDto> homeFindHalfYearAmountData(@Param("params") HomeRequestDto params);
|
||||||
|
//因为站端不需要显示金额, 所有重新写一个
|
||||||
|
List<HomeOrderSwapBatteryHalfYearAmountDto> homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params);
|
||||||
|
|
||||||
Long homeFindOrderCountData(@Param("date") Date date);
|
Long homeFindOrderCountData(@Param("date") Date date);
|
||||||
|
|
||||||
Double homeFindOrderAmountData(@Param("date") Date date);
|
Double homeFindOrderAmountData(@Param("date") Date date);
|
||||||
|
|
||||||
|
List<HomeOrderInfo> findOrderListByStatus(@Param("status") Integer status);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,12 @@ package com.evotech.hd.common.constant;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public class MongoConstant {
|
public class MongoConstant {
|
||||||
|
|
||||||
|
public class ErrorCode{
|
||||||
|
//站端告警标识
|
||||||
|
public static final Integer STATION_ALARM_CODE= 2;
|
||||||
|
|
||||||
|
}
|
||||||
//电池实时信息数据库
|
//电池实时信息数据库
|
||||||
public static final String BATTERY_DATA_BASE="battery_info";
|
public static final String BATTERY_DATA_BASE="battery_info";
|
||||||
//电池箱实时信息数据库
|
//电池箱实时信息数据库
|
||||||
@ -27,7 +33,7 @@ public class MongoConstant {
|
|||||||
* 条件查询, 示例
|
* 条件查询, 示例
|
||||||
* put(查询类型+"条件名称","条件值")
|
* put(查询类型+"条件名称","条件值")
|
||||||
*/
|
*/
|
||||||
public static final String AND = "and";
|
public static final String EQ = "and";
|
||||||
public static final String IN = "in";
|
public static final String IN = "in";
|
||||||
public static final String NOT_IN = "not_in";
|
public static final String NOT_IN = "not_in";
|
||||||
public static final String GT = "gt";
|
public static final String GT = "gt";
|
||||||
|
|||||||
@ -177,7 +177,7 @@ public class MongoDBService {
|
|||||||
String[] keyAndQueryType = key.split(MongoConstant.SEPARATION);
|
String[] keyAndQueryType = key.split(MongoConstant.SEPARATION);
|
||||||
//根据类型做查询
|
//根据类型做查询
|
||||||
switch (keyAndQueryType[0]){
|
switch (keyAndQueryType[0]){
|
||||||
case MongoConstant.AND:
|
case MongoConstant.EQ:
|
||||||
query.addCriteria(Criteria.where(keyAndQueryType[1]).is(params.get(key)));
|
query.addCriteria(Criteria.where(keyAndQueryType[1]).is(params.get(key)));
|
||||||
break;
|
break;
|
||||||
case MongoConstant.IN:
|
case MongoConstant.IN:
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
package com.evotech.hd.cloud.controller;
|
package com.evotech.hd.cloud.controller;
|
||||||
|
|
||||||
import com.evotech.hd.cloud.entity.request.HomeDataRequest;
|
|
||||||
import com.evotech.hd.cloud.entity.vo.*;
|
import com.evotech.hd.cloud.entity.vo.*;
|
||||||
import com.evotech.hd.cloud.service.HomeService;
|
import com.evotech.hd.cloud.service.HomeService;
|
||||||
import com.evotech.hd.common.core.Dto.Result;
|
import com.evotech.hd.common.core.Dto.Result;
|
||||||
@ -9,7 +8,6 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springdoc.core.annotations.ParameterObject;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@ -26,57 +24,132 @@ public class HomeController {
|
|||||||
@Resource
|
@Resource
|
||||||
private HomeService homeService;
|
private HomeService homeService;
|
||||||
|
|
||||||
@Operation(summary = "数据1-运营商,换电站,电池,机器人")
|
@Operation(summary = "平台首页===> 数据1-运营商,换电站,认证公司, 机器人 电池")
|
||||||
@GetMapping("/data1")
|
@GetMapping("/platform/data1")
|
||||||
@ApiOperationSupport(order = 1)
|
@ApiOperationSupport(order = 1)
|
||||||
public Result<HomeData1> homeData1(@ParameterObject HomeDataRequest hd) {
|
public Result<HomePlatformData1> platformData1() {
|
||||||
return homeService.homeData1(hd);
|
return homeService.platformData1();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "数据2-公司、用户、车辆")
|
@Operation(summary = "平台首页===> 数据2-金额 占比, 半年交易情况等")
|
||||||
@GetMapping("/data2")
|
@GetMapping("/platform/data2")
|
||||||
@ApiOperationSupport(order = 2)
|
@ApiOperationSupport(order = 2)
|
||||||
public Result<HomeData2> homeData2() {
|
public Result<HomePlatformData2> platformData2() {
|
||||||
return homeService.homeData2();
|
return homeService.platformData2();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "数据3-订单总数 订单占比")
|
|
||||||
@GetMapping("/data3")
|
@Operation(summary = "运营商首页===> 换电站 机器人 电池")
|
||||||
|
@GetMapping("/roxy/data1")
|
||||||
@ApiOperationSupport(order = 3)
|
@ApiOperationSupport(order = 3)
|
||||||
public Result<HomeData3> homeData3(@ParameterObject HomeDataRequest hd) {
|
public Result<HomePoxyData> roxyData1() {
|
||||||
return homeService.homeData3(hd);
|
return homeService.roxyData1();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "数据4-收入/支出金额")
|
@Operation(summary = "运营商首页===> 当月订单情况, 和近半年情况 ")
|
||||||
@GetMapping("/data4")
|
@GetMapping("/roxy/data2")
|
||||||
@ApiOperationSupport(order = 4)
|
@ApiOperationSupport(order = 4)
|
||||||
public Result<HomeData4> homeData4(@ParameterObject HomeDataRequest hd) {
|
public Result<HomePoxyData2> roxyData2() {
|
||||||
return homeService.homeData4(hd);
|
return homeService.roxyData2();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "数据5-近6个月订单统计")
|
|
||||||
@GetMapping("/data5")
|
@Operation(summary = "站端首页===> 机器人 电池 , 订单")
|
||||||
|
@GetMapping("/station/data1")
|
||||||
@ApiOperationSupport(order = 5)
|
@ApiOperationSupport(order = 5)
|
||||||
public Result<List<HomeData5>> homeData5(@ParameterObject HomeDataRequest hd) {
|
public Result<HomeStationData> stationData1() {
|
||||||
return homeService.homeData5(hd);
|
return homeService.stationData1();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "数据6-近6个月交易统计")
|
|
||||||
@GetMapping("/data6")
|
@Operation(summary = "公司首页")
|
||||||
|
@GetMapping("/company/data")
|
||||||
@ApiOperationSupport(order = 6)
|
@ApiOperationSupport(order = 6)
|
||||||
public Result<List<HomeData6>> homeData6(@ParameterObject HomeDataRequest hd) {
|
public Result<HomeCompanyData> company() {
|
||||||
return homeService.homeData6(hd);
|
return homeService.company();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Operation(summary = "数据7-同比、环比")
|
@Operation(summary = "告警信息")
|
||||||
@GetMapping("/data7")
|
@GetMapping("/alarm/data")
|
||||||
@ApiOperationSupport(order = 7)
|
@ApiOperationSupport(order = 7)
|
||||||
public Result<HomeData7> homeData7(Integer type) {
|
public Result<List<HomeAlarmData>> alarmData() {
|
||||||
return homeService.homeData7(type);
|
return homeService.alarmData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据1-运营商,换电站,电池,机器人")
|
||||||
|
// @GetMapping("/data1")
|
||||||
|
// @ApiOperationSupport(order = 1)
|
||||||
|
// public Result<HomeData1> homeData1(@ParameterObject HomeDataRequest hd) {
|
||||||
|
// return homeService.homeData1(hd);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据2-公司、用户、车辆")
|
||||||
|
// @GetMapping("/data2")
|
||||||
|
// @ApiOperationSupport(order = 2)
|
||||||
|
// public Result<HomeData2> homeData2() {
|
||||||
|
// return homeService.homeData2();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据3-订单总数 订单占比")
|
||||||
|
// @GetMapping("/data3")
|
||||||
|
// @ApiOperationSupport(order = 3)
|
||||||
|
// public Result<HomeData3> homeData3(@ParameterObject HomeDataRequest hd) {
|
||||||
|
// return homeService.homeData3(hd);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据4-收入/支出金额")
|
||||||
|
// @GetMapping("/data4")
|
||||||
|
// @ApiOperationSupport(order = 4)
|
||||||
|
// public Result<HomeData4> homeData4(@ParameterObject HomeDataRequest hd) {
|
||||||
|
// return homeService.homeData4(hd);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据5-近6个月订单统计")
|
||||||
|
// @GetMapping("/data5")
|
||||||
|
// @ApiOperationSupport(order = 5)
|
||||||
|
// public Result<List<HomeData5>> homeData5(@ParameterObject HomeDataRequest hd) {
|
||||||
|
// return homeService.homeData5(hd);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据6-近6个月交易统计")
|
||||||
|
// @GetMapping("/data6")
|
||||||
|
// @ApiOperationSupport(order = 6)
|
||||||
|
// public Result<List<HomeData6>> homeData6(@ParameterObject HomeDataRequest hd) {
|
||||||
|
// return homeService.homeData6(hd);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @Operation(summary = "数据7-同比、环比")
|
||||||
|
// @GetMapping("/data7")
|
||||||
|
// @ApiOperationSupport(order = 7)
|
||||||
|
// public Result<HomeData7> homeData7(Integer type) {
|
||||||
|
// return homeService.homeData7(type);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
@Operation(hidden = true)
|
||||||
@GetMapping("/login/data")
|
@GetMapping("/login/data")
|
||||||
public void loginData() {
|
public void loginData() {
|
||||||
homeService.loginData();
|
homeService.loginData();
|
||||||
|
|||||||
@ -13,8 +13,8 @@ import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao;
|
|||||||
import com.evotech.hd.cloud.device.dh.DHRequestUtil;
|
import com.evotech.hd.cloud.device.dh.DHRequestUtil;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.impl.state.MqttStateChargingDataExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
|
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
|
||||||
import com.evotech.hd.common.core.entity.Result;
|
import com.evotech.hd.common.core.entity.Result;
|
||||||
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||||
@ -81,8 +81,8 @@ public class TestController {
|
|||||||
header.setFunction(json.getString("function"));
|
header.setFunction(json.getString("function"));
|
||||||
cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy"));
|
cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy"));
|
||||||
|
|
||||||
Map<String, MqttRequestExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttRequestExchangeProcessor.class);
|
Map<String, MqttStrategyExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
|
||||||
for (MqttRequestExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
|
for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
|
||||||
if(processor.accept(header.getFunction())){
|
if(processor.accept(header.getFunction())){
|
||||||
processor.exchange(topic, header, dataBody);
|
processor.exchange(topic, header, dataBody);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,45 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首页报警信息类
|
||||||
|
*
|
||||||
|
* @ClassName:HomeAlarmData
|
||||||
|
* @date: 2025年05月08日 14:41
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(name = "报警信息")
|
||||||
|
public class HomeAlarmData {
|
||||||
|
|
||||||
|
// @Schema(description = "设备名称")
|
||||||
|
// String deviceName;
|
||||||
|
//
|
||||||
|
// @Schema(description = "设备类型")
|
||||||
|
// String deviceType;
|
||||||
|
|
||||||
|
@Schema(description = "站点名称")
|
||||||
|
String stationName;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
String stationCode;
|
||||||
|
|
||||||
|
@Schema(description = "报警类型")
|
||||||
|
String alarmType;
|
||||||
|
|
||||||
|
@Schema(description = "报警时间")
|
||||||
|
String alarmTime;
|
||||||
|
|
||||||
|
public HomeAlarmData() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public HomeAlarmData(String stationName, String stationCode) {
|
||||||
|
this.stationName = stationName;
|
||||||
|
this.stationCode = stationCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo;
|
||||||
|
import com.evotech.hd.common.core.utils.Collections;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公司首页类
|
||||||
|
* @ClassName:HomeCompanyData
|
||||||
|
* @date: 2025年05月08日 17:31
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(name = "公司首页")
|
||||||
|
public class HomeCompanyData {
|
||||||
|
|
||||||
|
@Schema(description = "车辆")
|
||||||
|
private Long carNum;
|
||||||
|
|
||||||
|
@Schema(description = "员工")
|
||||||
|
private Long userNum;
|
||||||
|
|
||||||
|
@Schema(description = "待结算订单")
|
||||||
|
private Long PendingOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "待结算金额")
|
||||||
|
private Double PendingOrderAmount;
|
||||||
|
|
||||||
|
@Schema(description = "换电订单信息")
|
||||||
|
private List<HomeOrderInfo> orderList = Collections.emptyList();
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 平台首页信息统计类类
|
||||||
|
*
|
||||||
|
* @ClassName:HomePlatformData1
|
||||||
|
* @date: 2025年05月08日 8:54
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(name = "运营商,换电站,公司, 机器人, 电池")
|
||||||
|
public class HomePlatformData1 extends HomePoxyData{
|
||||||
|
|
||||||
|
@Schema(description = "代理商数")
|
||||||
|
private Long proxyNum;
|
||||||
|
|
||||||
|
@Schema(description = "公司数")
|
||||||
|
private Long totalCompanyNum;
|
||||||
|
|
||||||
|
@Schema(description = "用户数")
|
||||||
|
private Long totalUserNum;
|
||||||
|
|
||||||
|
@Schema(description = "车辆数")
|
||||||
|
private Long totalCarNum;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto;
|
||||||
|
import com.evotech.hd.common.core.utils.Collections;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单相关类
|
||||||
|
* @ClassName:HomePlatformData2
|
||||||
|
* @date: 2025年05月08日 11:53
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(name = "近半年订单金额, 占比, 运营情况")
|
||||||
|
public class HomePlatformData2 {
|
||||||
|
|
||||||
|
@Schema(description = "完成订单数量")
|
||||||
|
private Long totalFinishOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "完成金额")
|
||||||
|
private Double totalFinishAmount;
|
||||||
|
|
||||||
|
@Schema(description = "待结算订单数量")
|
||||||
|
private Long totalPendingOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "待结算金额")
|
||||||
|
private Double totalPendingOrderAmount;
|
||||||
|
|
||||||
|
@Schema(description = "订单总数")
|
||||||
|
private Long totalOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "各运营商近半年订单占比")
|
||||||
|
List<HomePlatformDataDetailDto> countList = Collections.emptyList();
|
||||||
|
|
||||||
|
@Schema(description = "近半年订单走势")
|
||||||
|
List<HomeOrderSwapBatteryHalfYearAmountDto> trendList = Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 换电站订单占比类
|
||||||
|
*
|
||||||
|
* @ClassName:HomeOrderSwapBatteryDto
|
||||||
|
* @date: 2025年04月24日 10:06
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(name = "首页占比相关数据")
|
||||||
|
public class HomePlatformDataDetailDto {
|
||||||
|
|
||||||
|
@Schema(description = "运营商 or 站点 名称")
|
||||||
|
String proxyName;
|
||||||
|
@Schema(description = "运营商 or 站点 订单数量")
|
||||||
|
Long quantity;
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运营商首页信息统计类类
|
||||||
|
*
|
||||||
|
* @ClassName:HomePlatformData1
|
||||||
|
* @date: 2025年05月08日 8:54
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(name = "换电站, 机器人, 电池")
|
||||||
|
public class HomePoxyData {
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "总换电站数")
|
||||||
|
private Long totalStation;
|
||||||
|
|
||||||
|
@Schema(description = "营业换电站数")
|
||||||
|
private Long workStation;
|
||||||
|
|
||||||
|
@Schema(description = "总机器人数")
|
||||||
|
private Long totalRobot;
|
||||||
|
|
||||||
|
@Schema(description = "可用机器人数")
|
||||||
|
private Long availableRobot;
|
||||||
|
|
||||||
|
@Schema(description = "总电池数")
|
||||||
|
private Long totalDC;
|
||||||
|
|
||||||
|
@Schema(description = "充电电池数")
|
||||||
|
private Long chargeDC;
|
||||||
|
|
||||||
|
@Schema(description = "可用电池数")
|
||||||
|
private Long availableDC;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto;
|
||||||
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto;
|
||||||
|
import com.evotech.hd.common.core.utils.Collections;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单相关类
|
||||||
|
* @ClassName:HomePlatformData2
|
||||||
|
* @date: 2025年05月08日 11:53
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(name = "订单情况, 近半年订单金额, 占比, 运营情况")
|
||||||
|
public class HomePoxyData2 {
|
||||||
|
|
||||||
|
@Schema(description = "当月完成订单数量")
|
||||||
|
private Long currentTotalFinishOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "当月完成金额")
|
||||||
|
private Double currentTotalFinishAmount;
|
||||||
|
|
||||||
|
@Schema(description = "当月待结算订单数量")
|
||||||
|
private Long currentTotalPendingOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "当月待结算金额")
|
||||||
|
private Double currentTotalPendingOrderAmount;
|
||||||
|
|
||||||
|
@Schema(description = "当月订单总数")
|
||||||
|
private Long currentTotalOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "近半年订单总数")
|
||||||
|
private Long halfYearTotalOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "各站点近半年订单占比")
|
||||||
|
List<HomeOrderSwapBatteryProportionDto> countList = Collections.emptyList();
|
||||||
|
|
||||||
|
@Schema(description = "近半年订单走势")
|
||||||
|
List<HomeOrderSwapBatteryHalfYearAmountDto> trendList = Collections.emptyList();
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
package com.evotech.hd.cloud.entity.vo;
|
||||||
|
|
||||||
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto;
|
||||||
|
import com.evotech.hd.common.core.utils.Collections;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类
|
||||||
|
*
|
||||||
|
* @ClassName:HomeStationData
|
||||||
|
* @date: 2025年05月08日 16:51
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(name = "站端首页占比相关数据")
|
||||||
|
public class HomeStationData {
|
||||||
|
|
||||||
|
@Schema(description = "总机器人数")
|
||||||
|
private Long totalRobot;
|
||||||
|
|
||||||
|
@Schema(description = "可用机器人数")
|
||||||
|
private Long availableRobot;
|
||||||
|
|
||||||
|
@Schema(description = "总电池数")
|
||||||
|
private Long totalDC;
|
||||||
|
|
||||||
|
@Schema(description = "充电电池数")
|
||||||
|
private Long chargeDC;
|
||||||
|
|
||||||
|
@Schema(description = "可用电池数")
|
||||||
|
private Long availableDC;
|
||||||
|
|
||||||
|
@Schema(description = "总订单数")
|
||||||
|
private Long totalOrderNum;
|
||||||
|
|
||||||
|
@Schema(description = "已结算订单数")
|
||||||
|
private Long totalFinishOrderNum = 0l;
|
||||||
|
|
||||||
|
@Schema(description = "带结算订单数")
|
||||||
|
private Long totalPendingOrderNum = 0l;
|
||||||
|
|
||||||
|
@Schema(description = "近半年订单走势")
|
||||||
|
List<HomeOrderSwapBatteryHalfYearAmountDto> trendList = Collections.emptyList();
|
||||||
|
|
||||||
|
}
|
||||||
@ -12,14 +12,13 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
|||||||
import org.springframework.boot.ApplicationArguments;
|
import org.springframework.boot.ApplicationArguments;
|
||||||
import org.springframework.boot.ApplicationRunner;
|
import org.springframework.boot.ApplicationRunner;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
@Component
|
//@Component
|
||||||
@Order(value = 20)
|
@Order(value = 20)
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MqttConnectInit implements ApplicationRunner {
|
public class MqttConnectInit implements ApplicationRunner {
|
||||||
|
|||||||
@ -22,7 +22,7 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoReq;
|
|||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoResponse;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoResponse;
|
||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData;
|
||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.*;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.*;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||||
import com.evotech.hd.cloud.service.WechatUserService;
|
import com.evotech.hd.cloud.service.WechatUserService;
|
||||||
import com.evotech.hd.cloud.utils.CommonUtil;
|
import com.evotech.hd.cloud.utils.CommonUtil;
|
||||||
@ -102,11 +102,11 @@ public class RequestMessageService {
|
|||||||
handlStartSwap(topic,header,battery);
|
handlStartSwap(topic,header,battery);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Map<String, MqttRequestExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttRequestExchangeProcessor.class);
|
Map<String, MqttStrategyExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
|
||||||
if(CollectionUtils.isEmpty(mqttMessageRequestExchangeProcessorMap)){
|
if(CollectionUtils.isEmpty(mqttMessageRequestExchangeProcessorMap)){
|
||||||
log.error("mqttRequestExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
|
log.error("mqttRequestExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
|
||||||
}
|
}
|
||||||
for (MqttRequestExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
|
for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
|
||||||
if(processor.accept(header.getFunction())){
|
if(processor.accept(header.getFunction())){
|
||||||
processor.exchange(topic, header, dataBody);
|
processor.exchange(topic, header, dataBody);
|
||||||
}
|
}
|
||||||
@ -258,6 +258,8 @@ public class RequestMessageService {
|
|||||||
log.info("\r\n=====>>>生成订单信息--MQTT发送到消息主题:{},订单编码:{}", topic,CommonUtil.swapBatteryOrderNo(orderByPlateNumReq.getStationCode()));
|
log.info("\r\n=====>>>生成订单信息--MQTT发送到消息主题:{},订单编码:{}", topic,CommonUtil.swapBatteryOrderNo(orderByPlateNumReq.getStationCode()));
|
||||||
orderSwapBatteryService.add(osb);
|
orderSwapBatteryService.add(osb);
|
||||||
}
|
}
|
||||||
|
//走到此处, 证明上面逻辑没有问题, 需要删除预约单过期标识
|
||||||
|
redisUtil.del("preorder:expire:"+osbp.getPkId());
|
||||||
// 返回数据
|
// 返回数据
|
||||||
OrderData od = new OrderData();
|
OrderData od = new OrderData();
|
||||||
BeanUtils.copyProperties(osb, od);
|
BeanUtils.copyProperties(osb, od);
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
|||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus;
|
||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData;
|
||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.service.BatteryStationDcService;
|
import com.evotech.hd.cloud.service.BatteryStationDcService;
|
||||||
import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
|
import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
|
||||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||||
@ -78,11 +78,11 @@ public class StateMessageService {
|
|||||||
case FUN_TEST:
|
case FUN_TEST:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Map<String, MqttRequestExchangeProcessor> mqttRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttRequestExchangeProcessor.class);
|
Map<String, MqttStrategyExchangeProcessor> mqttRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
|
||||||
if(CollectionUtils.isEmpty(mqttRequestExchangeProcessorMap)){
|
if(CollectionUtils.isEmpty(mqttRequestExchangeProcessorMap)){
|
||||||
log.error("mqttRequestExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
|
log.error("mqttRequestExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
|
||||||
}
|
}
|
||||||
for (MqttRequestExchangeProcessor processor : mqttRequestExchangeProcessorMap.values()) {
|
for (MqttStrategyExchangeProcessor processor : mqttRequestExchangeProcessorMap.values()) {
|
||||||
if(processor.accept(header.getFunction())){
|
if(processor.accept(header.getFunction())){
|
||||||
processor.exchange(topic, header, dataBody);
|
processor.exchange(topic, header, dataBody);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
package com.evotech.hd.cloud.mqtt.message.processor.observer.event;
|
||||||
|
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站点停止服务事件
|
||||||
|
* @ClassName:AlarmEvent
|
||||||
|
* @date: 2025年05月15日 13:51
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BatteryStationStopServerEvent extends ApplicationEvent {
|
||||||
|
|
||||||
|
private BatteryStation batteryStation;
|
||||||
|
|
||||||
|
public BatteryStationStopServerEvent(Object source, BatteryStation batteryStation) {
|
||||||
|
super(source);
|
||||||
|
this.batteryStation = batteryStation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BatteryStation getBatteryStation() {
|
||||||
|
return batteryStation;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
package com.evotech.hd.cloud.mqtt.message.processor.observer.listener;
|
||||||
|
|
||||||
|
import com.evotech.hd.cloud.mqtt.message.processor.observer.event.BatteryStationStopServerEvent;
|
||||||
|
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||||
|
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
|
||||||
|
import com.evotech.hd.cloud.service.rpc.ResourceService;
|
||||||
|
import com.evotech.hd.common.core.Dto.ResultUtil;
|
||||||
|
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||||
|
import com.evotech.hd.common.core.utils.Collections;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站点停止服务监听器
|
||||||
|
*
|
||||||
|
* @ClassName:AlarmListener
|
||||||
|
* @date: 2025年05月15日 13:58
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class BatteryStationStopServerListener {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
OrderSwapBatteryService orderSwapBatteryService;
|
||||||
|
@Resource
|
||||||
|
private GZHTemplateMessageService templateMessageService;
|
||||||
|
@Resource
|
||||||
|
private ResourceService resourceService;
|
||||||
|
|
||||||
|
@EventListener
|
||||||
|
public void handleStationStopEvent(BatteryStationStopServerEvent event){
|
||||||
|
BatteryStation batteryStation = event.getBatteryStation();
|
||||||
|
//监听站端运营状态状态, 如果不为运营状态
|
||||||
|
if(!Integer.valueOf(1).equals(batteryStation.getStatus())){
|
||||||
|
//不是营运状态, 获取当前站点是否存在预约单
|
||||||
|
List<OrderSwapBatteryPre> preList = orderSwapBatteryService.findOrderSwapBatteryPreList(batteryStation.getCode());
|
||||||
|
Map<String, String> plateNum = new LinkedHashMap<>();
|
||||||
|
//查询站点是否存在预约单, 存在的话. 通知客户,
|
||||||
|
if(Collections.isNotEmpty(preList)){
|
||||||
|
//直接关闭预约单
|
||||||
|
orderSwapBatteryService.clearOrderSwapBatteryPre(preList.stream().map(OrderSwapBatteryPre::getPkId).collect(Collectors.toList()));
|
||||||
|
plateNum = preList.stream().collect(Collectors.toMap(OrderSwapBatteryPre::getUcode, OrderSwapBatteryPre::getPlateNum, (k1, k2) -> k1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
StopServerTemplateDto stopServerTemplateDto = new StopServerTemplateDto();
|
||||||
|
stopServerTemplateDto.setStationName(batteryStation.getName());
|
||||||
|
stopServerTemplateDto.setPlateNum(plateNum);
|
||||||
|
//同步推送站管理员, 和 运营商
|
||||||
|
//站信息查找站管理员和运营商信息, 根据运营商信息, 查对应的负责人信息
|
||||||
|
stopServerTemplateDto.setAdminWuId(ResultUtil.getValue(resourceService.alarmUserList(batteryStation.getCode(), batteryStation.getProxyId())));
|
||||||
|
stopServerTemplateDto.setReason(String.format("因%s原因站点暂停运营,请预约其他站点", (Integer.valueOf(2).equals(batteryStation.getStatus()) ? "调试" : "检修")));
|
||||||
|
templateMessageService.serviceStopMessageSend(stopServerTemplateDto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
package com.evotech.hd.cloud.mqtt.message.processor.observer.publisher;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公共事件发布类
|
||||||
|
* @ClassName:CommonEventPublisher
|
||||||
|
* @date: 2025年05月15日 13:59
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class CommonEventPublisher {
|
||||||
|
|
||||||
|
private final ApplicationEventPublisher publisher;
|
||||||
|
|
||||||
|
public CommonEventPublisher(ApplicationEventPublisher publisher) {
|
||||||
|
this.publisher = publisher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends ApplicationEvent> void publishEvent(T event) {
|
||||||
|
publisher.publishEvent(event); // 发布自定义事件
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.evotech.hd.cloud.mqtt.message.processor;
|
package com.evotech.hd.cloud.mqtt.message.processor.strategy;
|
||||||
|
|
||||||
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DatePattern;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
@ -29,9 +29,9 @@ import java.util.Date;
|
|||||||
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public interface MqttRequestExchangeProcessor {
|
public interface MqttStrategyExchangeProcessor {
|
||||||
|
|
||||||
Logger logger = LoggerFactory.getLogger(MqttRequestExchangeProcessor.class);
|
Logger logger = LoggerFactory.getLogger(MqttStrategyExchangeProcessor.class);
|
||||||
|
|
||||||
boolean accept(String functionName);
|
boolean accept(String functionName);
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.evotech.hd.cloud.mqtt.message.processor.impl.request;
|
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@ -6,7 +6,7 @@ import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
|
|||||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||||
import com.evotech.hd.cloud.service.VehicleService;
|
import com.evotech.hd.cloud.service.VehicleService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
@ -27,7 +27,7 @@ import org.springframework.util.Assert;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttRequestExchangeProcessor {
|
public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategyExchangeProcessor {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
VehicleService vehicleService;
|
VehicleService vehicleService;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.evotech.hd.cloud.mqtt.message.processor.impl.request;
|
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@ -6,7 +6,7 @@ import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
|
|||||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
|
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.service.BatteryStationCdStrategyService;
|
import com.evotech.hd.cloud.service.BatteryStationCdStrategyService;
|
||||||
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy;
|
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
@ -26,7 +26,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MqttRequestStrategyExchangeProcessorImpl implements MqttRequestExchangeProcessor {
|
public class MqttRequestStrategyExchangeProcessorImpl implements MqttStrategyExchangeProcessor {
|
||||||
@Resource
|
@Resource
|
||||||
BatteryStationCdStrategyService batteryStationCdStrategyService;
|
BatteryStationCdStrategyService batteryStationCdStrategyService;
|
||||||
|
|
||||||
@ -1,11 +1,11 @@
|
|||||||
package com.evotech.hd.cloud.mqtt.message.processor.impl.state;
|
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.common.constant.MongoConstant;
|
import com.evotech.hd.common.constant.MongoConstant;
|
||||||
import com.evotech.hd.common.documnet.BatData;
|
import com.evotech.hd.common.documnet.BatData;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -23,7 +23,7 @@ import org.springframework.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MqttStateBatDataDataExchangeProcessor implements MqttRequestExchangeProcessor {
|
public class MqttStateBatDataDataExchangeProcessor implements MqttStrategyExchangeProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(String functionName) {
|
public boolean accept(String functionName) {
|
||||||
@ -1,11 +1,11 @@
|
|||||||
package com.evotech.hd.cloud.mqtt.message.processor.impl.state;
|
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.common.constant.MongoConstant;
|
import com.evotech.hd.common.constant.MongoConstant;
|
||||||
import com.evotech.hd.common.documnet.ChargingData;
|
import com.evotech.hd.common.documnet.ChargingData;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -23,7 +23,7 @@ import org.springframework.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MqttStateChargingDataExchangeProcessor implements MqttRequestExchangeProcessor {
|
public class MqttStateChargingDataExchangeProcessor implements MqttStrategyExchangeProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(String functionName) {
|
public boolean accept(String functionName) {
|
||||||
@ -1,11 +1,11 @@
|
|||||||
package com.evotech.hd.cloud.mqtt.message.processor.impl.state;
|
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||||
import com.evotech.hd.cloud.mqtt.message.processor.MqttRequestExchangeProcessor;
|
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
|
||||||
import com.evotech.hd.cloud.service.BatteryStationService;
|
import com.evotech.hd.cloud.service.BatteryStationService;
|
||||||
import com.evotech.hd.common.constant.MongoConstant;
|
import com.evotech.hd.common.constant.MongoConstant;
|
||||||
import com.evotech.hd.common.documnet.StationState;
|
import com.evotech.hd.common.documnet.StationState;
|
||||||
@ -24,7 +24,7 @@ import org.springframework.stereotype.Service;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MqttStateStationStateExchangeProcessor implements MqttRequestExchangeProcessor {
|
public class MqttStateStationStateExchangeProcessor implements MqttStrategyExchangeProcessor {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
BatteryStationService batteryStationService;
|
BatteryStationService batteryStationService;
|
||||||
@ -8,6 +8,42 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface HomeService {
|
public interface HomeService {
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 运营商, 换电站, 公司, 机器人 电池相关统计
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Result<HomePlatformData1> platformData1();
|
||||||
|
/***
|
||||||
|
* 金额 占比, 交易情况
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Result<HomePlatformData2> platformData2();
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 换电站, 机器人 电池相关统计
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Result<HomePoxyData> roxyData1();
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 金额 占比, 交易情况
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Result<HomePoxyData2> roxyData2();
|
||||||
|
|
||||||
|
|
||||||
|
public Result<HomeStationData> stationData1();
|
||||||
|
|
||||||
|
public Result<HomeCompanyData> company();
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 报警信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Result<List<HomeAlarmData>> alarmData();
|
||||||
|
|
||||||
public Result<HomeData1> homeData1(HomeDataRequest hd);
|
public Result<HomeData1> homeData1(HomeDataRequest hd);
|
||||||
|
|
||||||
public Result<HomeData2> homeData2();
|
public Result<HomeData2> homeData2();
|
||||||
|
|||||||
@ -16,16 +16,17 @@ import com.evotech.hd.cloud.device.dh.DHRequestUtil;
|
|||||||
import com.evotech.hd.cloud.entity.BatteryStationSecretKey;
|
import com.evotech.hd.cloud.entity.BatteryStationSecretKey;
|
||||||
import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest;
|
import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest;
|
||||||
import com.evotech.hd.cloud.exception.DHException;
|
import com.evotech.hd.cloud.exception.DHException;
|
||||||
|
import com.evotech.hd.cloud.mqtt.message.processor.observer.event.BatteryStationStopServerEvent;
|
||||||
|
import com.evotech.hd.cloud.mqtt.message.processor.observer.publisher.CommonEventPublisher;
|
||||||
import com.evotech.hd.cloud.service.BatteryStationService;
|
import com.evotech.hd.cloud.service.BatteryStationService;
|
||||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
|
||||||
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
|
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
|
||||||
import com.evotech.hd.cloud.service.rpc.ResourceService;
|
import com.evotech.hd.cloud.service.rpc.ResourceService;
|
||||||
import com.evotech.hd.cloud.service.rpc.WechatService;
|
import com.evotech.hd.cloud.service.rpc.WechatService;
|
||||||
|
import com.evotech.hd.common.constant.MongoConstant;
|
||||||
import com.evotech.hd.common.core.Dto.Result;
|
import com.evotech.hd.common.core.Dto.Result;
|
||||||
import com.evotech.hd.common.core.Dto.ResultUtil;
|
import com.evotech.hd.common.core.Dto.ResultUtil;
|
||||||
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
||||||
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
|
import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
|
||||||
import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO;
|
import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO;
|
||||||
import com.evotech.hd.common.core.enums.CodeMsg;
|
import com.evotech.hd.common.core.enums.CodeMsg;
|
||||||
@ -46,7 +47,6 @@ import java.io.UnsupportedEncodingException;
|
|||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -64,9 +64,9 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
|||||||
private ResourceService resourceService;
|
private ResourceService resourceService;
|
||||||
@Resource
|
@Resource
|
||||||
private GZHTemplateMessageService templateMessageService;
|
private GZHTemplateMessageService templateMessageService;
|
||||||
@Resource
|
|
||||||
OrderSwapBatteryService orderSwapBatteryService;
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
CommonEventPublisher eventPublisher;
|
||||||
@Override
|
@Override
|
||||||
public com.evotech.hd.common.core.entity.Result<Integer> add(BatteryStation bs) {
|
public com.evotech.hd.common.core.entity.Result<Integer> add(BatteryStation bs) {
|
||||||
bs.setCtime(new Date());
|
bs.setCtime(new Date());
|
||||||
@ -131,6 +131,7 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
|||||||
public com.evotech.hd.common.core.entity.Result<Integer> update(BatteryStation bs) {
|
public com.evotech.hd.common.core.entity.Result<Integer> update(BatteryStation bs) {
|
||||||
int n = batteryStationDao.updateById(bs);
|
int n = batteryStationDao.updateById(bs);
|
||||||
if (n == 1) {
|
if (n == 1) {
|
||||||
|
eventPublisher.publishEvent(new BatteryStationStopServerEvent(this,bs));
|
||||||
return new com.evotech.hd.common.core.entity.Result<Integer>().success(n);
|
return new com.evotech.hd.common.core.entity.Result<Integer>().success(n);
|
||||||
}
|
}
|
||||||
return new com.evotech.hd.common.core.entity.Result<Integer>().error("更新换电站失败!");
|
return new com.evotech.hd.common.core.entity.Result<Integer>().error("更新换电站失败!");
|
||||||
@ -348,7 +349,7 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
|||||||
//报警信息
|
//报警信息
|
||||||
StringBuilder alarmMsg = new StringBuilder("");
|
StringBuilder alarmMsg = new StringBuilder("");
|
||||||
//0-未知;1-正常;2-告警 沟通 只有2才算告警,未知不算告警
|
//0-未知;1-正常;2-告警 沟通 只有2才算告警,未知不算告警
|
||||||
isAlarm = Integer.valueOf(2).equals(fire);
|
isAlarm = MongoConstant.ErrorCode.STATION_ALARM_CODE.equals(fire);
|
||||||
//如果消防告警存在信息
|
//如果消防告警存在信息
|
||||||
if(isAlarm){
|
if(isAlarm){
|
||||||
alarmMsg.append("消防报警");
|
alarmMsg.append("消防报警");
|
||||||
@ -356,7 +357,7 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
|||||||
//如果消防没有报警, 检查烟感
|
//如果消防没有报警, 检查烟感
|
||||||
if(!isAlarm){
|
if(!isAlarm){
|
||||||
//因为烟感有多个, 所以一个烟感报警,及存在报警信息
|
//因为烟感有多个, 所以一个烟感报警,及存在报警信息
|
||||||
isAlarm = Collections.asList(smoke.split(",")).contains(Integer.valueOf(2));
|
isAlarm = Collections.asList(smoke.split(",")).contains(MongoConstant.ErrorCode.STATION_ALARM_CODE);
|
||||||
if(isAlarm){
|
if(isAlarm){
|
||||||
alarmMsg.append("烟感报警");
|
alarmMsg.append("烟感报警");
|
||||||
}
|
}
|
||||||
@ -365,17 +366,8 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
|||||||
batteryStation.setAlarm(isAlarm);
|
batteryStation.setAlarm(isAlarm);
|
||||||
int n = 0;
|
int n = 0;
|
||||||
if((n = batteryStationDao.updateById(batteryStation)) > 0){
|
if((n = batteryStationDao.updateById(batteryStation)) > 0){
|
||||||
//更新成功, 如果推送状态是运营状态, 则不需要做任何处理, 如果推送的状态非运营状态, 则需要同步推送预约单用户信息
|
//更新成功, 发布站端数据变更事件, 用于数据解耦
|
||||||
if(!Integer.valueOf(1).equals(batteryStation.getStatus())){
|
eventPublisher.publishEvent(new BatteryStationStopServerEvent(this,batteryStation));
|
||||||
//不是营运状态, 推送服务号通知
|
|
||||||
List<OrderSwapBatteryPre> preList = orderSwapBatteryService.findOrderSwapBatteryPreList(batteryStation.getCode());
|
|
||||||
if(Collections.isNotEmpty(preList)){
|
|
||||||
//直接关闭预约单
|
|
||||||
orderSwapBatteryService.clearOrderSwapBatteryPre(preList.stream().map(OrderSwapBatteryPre::getPkId).collect(Collectors.toList()));
|
|
||||||
//查询站点是否存在预约单, 存在的话. 通知客户,
|
|
||||||
templateMessageService.serviceStopMessageSend(preList.stream().map(OrderSwapBatteryPre::getUcode).collect(Collectors.toList()), (Integer.valueOf(2).equals(batteryStation.getStatus()) ? "调试" : "检修"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//存在报警信息
|
//存在报警信息
|
||||||
if(batteryStation.getAlarm()){
|
if(batteryStation.getAlarm()){
|
||||||
//同步推送站管理员, 和 运营商
|
//同步推送站管理员, 和 运营商
|
||||||
|
|||||||
@ -3,13 +3,18 @@ package com.evotech.hd.cloud.service.impl;
|
|||||||
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DatePattern;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.evotech.hd.cloud.dao.*;
|
import com.evotech.hd.cloud.dao.*;
|
||||||
import com.evotech.hd.cloud.entity.request.HomeDataRequest;
|
import com.evotech.hd.cloud.entity.request.HomeDataRequest;
|
||||||
import com.evotech.hd.cloud.entity.vo.*;
|
import com.evotech.hd.cloud.entity.vo.*;
|
||||||
|
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
||||||
import com.evotech.hd.cloud.service.HomeService;
|
import com.evotech.hd.cloud.service.HomeService;
|
||||||
|
import com.evotech.hd.common.constant.MongoConstant;
|
||||||
import com.evotech.hd.common.core.Dto.Result;
|
import com.evotech.hd.common.core.Dto.Result;
|
||||||
|
import com.evotech.hd.common.core.Dto.ResultUtil;
|
||||||
import com.evotech.hd.common.core.Dto.request.HomeRequestDto;
|
import com.evotech.hd.common.core.Dto.request.HomeRequestDto;
|
||||||
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo;
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto;
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto;
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto;
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto;
|
||||||
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto;
|
import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto;
|
||||||
@ -24,8 +29,10 @@ import com.evotech.hd.common.core.entity.resource.ProxyOperater;
|
|||||||
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
||||||
import com.evotech.hd.common.core.enums.CodeMsg;
|
import com.evotech.hd.common.core.enums.CodeMsg;
|
||||||
import com.evotech.hd.common.core.utils.Collections;
|
import com.evotech.hd.common.core.utils.Collections;
|
||||||
|
import com.evotech.hd.common.documnet.StationState;
|
||||||
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
|
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
|
||||||
import com.evotech.hd.common.redis.utils.RedisUtil;
|
import com.evotech.hd.common.redis.utils.RedisUtil;
|
||||||
|
import com.evotech.hd.common.service.MongoDBService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@ -68,6 +75,233 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<HomePlatformData1> platformData1() {
|
||||||
|
HomePlatformData1 data = new HomePlatformData1();
|
||||||
|
BeanUtils.copyProperties(ResultUtil.getValue(roxyData1()), data);
|
||||||
|
// 1. 运营商
|
||||||
|
data.setProxyNum(proxyOperaterDao.selectCount(new LambdaQueryWrapper<ProxyOperater>().eq(ProxyOperater::getDelFlag, 0).select(ProxyOperater::getPkId)));
|
||||||
|
// 1. 公司
|
||||||
|
data.setTotalCompanyNum(companyDao.selectCount(new LambdaQueryWrapper<Company>().eq(Company::getDelFlag, 0).select(Company::getPkId)));
|
||||||
|
// 2. 用户
|
||||||
|
data.setTotalUserNum(wechatUserDao.selectCount(new LambdaQueryWrapper<WechatUser>().select(WechatUser::getPkId)));
|
||||||
|
// 3. 车辆
|
||||||
|
data.setTotalCarNum(vehicleInfoDao.selectCount(new LambdaQueryWrapper<VehicleInfo>().eq(VehicleInfo::getDelFlag, 0).select(VehicleInfo::getPkId)));
|
||||||
|
|
||||||
|
return new Result<HomePlatformData1>().success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<HomePlatformData2> platformData2() {
|
||||||
|
HomePlatformData2 data = new HomePlatformData2();
|
||||||
|
Date d = new Date();
|
||||||
|
HomeRequestDto homeRequestDto = new HomeRequestDto(DateUtil.offsetMonth(d, -5), d);
|
||||||
|
//订单数量 or 订单金额
|
||||||
|
List<HomeOrderSwapBatteryAmountDto> orderAmountlist = orderSwapBatteryDao.homeFindAmountData(homeRequestDto);
|
||||||
|
if(Collections.isNotEmpty(orderAmountlist)){
|
||||||
|
HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null);
|
||||||
|
if(totalFinishOrder != null){
|
||||||
|
data.setTotalFinishOrderNum(totalFinishOrder.getDataCount());
|
||||||
|
data.setTotalFinishAmount(totalFinishOrder.getAmount());
|
||||||
|
}
|
||||||
|
HomeOrderSwapBatteryAmountDto totalPendingOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(6).equals(i.getStatus())).findFirst().orElse(null);
|
||||||
|
if(totalPendingOrder != null){
|
||||||
|
data.setTotalPendingOrderNum(totalPendingOrder.getDataCount());
|
||||||
|
data.setTotalPendingOrderAmount(totalPendingOrder.getAmount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算占比
|
||||||
|
Map<String, Long> countMap = Collections.emptyMap();
|
||||||
|
List<HomeOrderSwapBatteryProportionDto> list = orderSwapBatteryDao.homeFindProportionData(homeRequestDto);
|
||||||
|
if(Collections.isNotEmpty(list)){
|
||||||
|
//总订单数
|
||||||
|
data.setTotalOrderNum(list.stream().collect(Collectors.summingLong(i -> i.getQuantity())));
|
||||||
|
countMap = list.stream().collect(Collectors.toMap(HomeOrderSwapBatteryProportionDto::getStationCode, HomeOrderSwapBatteryProportionDto::getQuantity, (k1,k2)-> k1));
|
||||||
|
}
|
||||||
|
Map<String, List<String>> batteryStationMap = batteryStationDao.selectList(new LambdaQueryWrapper<BatteryStation>().eq(BatteryStation::getDelFlag, 0).select(BatteryStation::getCode, BatteryStation::getProxyId)).stream().collect(Collectors.groupingBy(BatteryStation::getProxyId, Collectors.mapping(station -> station.getCode(), Collectors.toList())));
|
||||||
|
|
||||||
|
List<HomePlatformDataDetailDto> countList = Collections.emptyList();
|
||||||
|
Map<String, Long> finalCountMap = countMap;
|
||||||
|
proxyOperaterDao.selectList(new LambdaQueryWrapper<ProxyOperater>().eq(ProxyOperater::getDelFlag, 0).select(ProxyOperater::getPoname, ProxyOperater::getPocode))
|
||||||
|
.forEach(proxy ->{
|
||||||
|
HomePlatformDataDetailDto detailDto = new HomePlatformDataDetailDto();
|
||||||
|
detailDto.setProxyName(proxy.getPoname());
|
||||||
|
final Long[] totalCount = {0l};
|
||||||
|
batteryStationMap.get(proxy.getPocode()).forEach(stationCode ->{
|
||||||
|
Long stationQuantity = finalCountMap.get(stationCode);
|
||||||
|
totalCount[0] = defaultValue(totalCount[0],0l) + defaultValue(stationQuantity,0l);
|
||||||
|
});
|
||||||
|
detailDto.setQuantity(totalCount[0]);
|
||||||
|
countList.add(detailDto);
|
||||||
|
});
|
||||||
|
data.setCountList(countList);
|
||||||
|
//近半年走势情况
|
||||||
|
data.setTrendList(orderSwapBatteryDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{
|
||||||
|
return o1.getMonth().compareTo(o2.getMonth());
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
return new Result<HomePlatformData2>().success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<HomePoxyData> roxyData1() {
|
||||||
|
HomePoxyData data = new HomePoxyData();
|
||||||
|
// 2. 换电站
|
||||||
|
data.setTotalStation(batteryStationDao.selectCount(new LambdaQueryWrapper<BatteryStation>().eq(BatteryStation::getDelFlag, 0).select(BatteryStation::getPkId)));
|
||||||
|
//可用换电站
|
||||||
|
data.setWorkStation(batteryStationDao.selectCount(new LambdaQueryWrapper<BatteryStation>().eq(BatteryStation::getDelFlag, 0).eq(BatteryStation::getStatus, 1).select(BatteryStation::getPkId)));
|
||||||
|
// 机器人
|
||||||
|
data.setTotalRobot(batteryStationRobotDao.selectCount(new LambdaQueryWrapper<BatteryStationRobot>().select(BatteryStationRobot::getPkId)));
|
||||||
|
//可用机器人
|
||||||
|
data.setAvailableRobot(batteryStationRobotDao.selectCount(new LambdaQueryWrapper<BatteryStationRobot>().eq(BatteryStationRobot::getStatus, 1).select(BatteryStationRobot::getPkId)));
|
||||||
|
// 电池
|
||||||
|
data.setTotalDC(batteryStationDcDao.selectCount(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getDelFlag, 0).select(BatteryStationDc::getPkId)));
|
||||||
|
//充电电池
|
||||||
|
data.setChargeDC(batteryStationDcDao.selectCount(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getDelFlag, 0).eq(BatteryStationDc::getStatus, 2).select(BatteryStationDc::getPkId)));
|
||||||
|
//可用电池
|
||||||
|
data.setAvailableDC(batteryStationDcDao.selectCount(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getDelFlag, 0).eq(BatteryStationDc::getStatus, 3).select(BatteryStationDc::getPkId)));
|
||||||
|
|
||||||
|
return new Result<HomePoxyData>().success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<HomePoxyData2> roxyData2() {
|
||||||
|
HomePoxyData2 data = new HomePoxyData2();
|
||||||
|
Date d = new Date();
|
||||||
|
HomeRequestDto homeRequestDto = new HomeRequestDto(DateUtil.beginOfMonth(d), d);
|
||||||
|
//订单数量 or 订单金额
|
||||||
|
List<HomeOrderSwapBatteryAmountDto> orderAmountlist = orderSwapBatteryDao.homeFindAmountData(homeRequestDto);
|
||||||
|
if(Collections.isNotEmpty(orderAmountlist)){
|
||||||
|
HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null);
|
||||||
|
if(totalFinishOrder != null){
|
||||||
|
data.setCurrentTotalFinishOrderNum(totalFinishOrder.getDataCount());
|
||||||
|
data.setCurrentTotalFinishAmount(totalFinishOrder.getAmount());
|
||||||
|
}
|
||||||
|
HomeOrderSwapBatteryAmountDto totalPendingOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(6).equals(i.getStatus())).findFirst().orElse(null);
|
||||||
|
if(totalPendingOrder != null){
|
||||||
|
data.setCurrentTotalPendingOrderNum(totalPendingOrder.getDataCount());
|
||||||
|
data.setCurrentTotalPendingOrderAmount(totalPendingOrder.getAmount());
|
||||||
|
}
|
||||||
|
data.setCurrentTotalOrderNum(defaultValue(data.getCurrentTotalFinishOrderNum(), 0l)+defaultValue(data.getCurrentTotalPendingOrderNum(), 0l));
|
||||||
|
}
|
||||||
|
|
||||||
|
homeRequestDto = new HomeRequestDto(DateUtil.offsetMonth(d, -5), d);
|
||||||
|
//订单数量 or 订单金额
|
||||||
|
//计算占比
|
||||||
|
List<HomeOrderSwapBatteryProportionDto> list = orderSwapBatteryDao.homeFindProportionData(homeRequestDto);
|
||||||
|
if(Collections.isNotEmpty(list)){
|
||||||
|
//总订单数
|
||||||
|
data.setHalfYearTotalOrderNum(list.stream().collect(Collectors.summingLong(i -> i.getQuantity())));
|
||||||
|
data.setCountList(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
//近半年走势情况
|
||||||
|
data.setTrendList(orderSwapBatteryDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{
|
||||||
|
return o1.getMonth().compareTo(o2.getMonth());
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
return new Result<HomePoxyData2>().success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> T defaultValue(T t, T defVal){
|
||||||
|
return ObjectUtils.isNotEmpty(t) ? t : defVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<HomeStationData> stationData1() {
|
||||||
|
HomeStationData data = new HomeStationData();
|
||||||
|
// 机器人
|
||||||
|
data.setTotalRobot(batteryStationRobotDao.selectCount(new LambdaQueryWrapper<BatteryStationRobot>().select(BatteryStationRobot::getPkId)));
|
||||||
|
//可用机器人
|
||||||
|
data.setAvailableRobot(batteryStationRobotDao.selectCount(new LambdaQueryWrapper<BatteryStationRobot>().eq(BatteryStationRobot::getStatus, 1).select(BatteryStationRobot::getPkId)));
|
||||||
|
// 电池
|
||||||
|
data.setTotalDC(batteryStationDcDao.selectCount(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getDelFlag, 0).select(BatteryStationDc::getPkId)));
|
||||||
|
//充电电池
|
||||||
|
data.setChargeDC(batteryStationDcDao.selectCount(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getDelFlag, 0).eq(BatteryStationDc::getStatus, 2).select(BatteryStationDc::getPkId)));
|
||||||
|
//可用电池
|
||||||
|
data.setAvailableDC(batteryStationDcDao.selectCount(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getDelFlag, 0).eq(BatteryStationDc::getStatus, 3).select(BatteryStationDc::getPkId)));
|
||||||
|
|
||||||
|
//订单数量 or 订单金额
|
||||||
|
Date d = new Date();
|
||||||
|
List<HomeOrderSwapBatteryAmountDto> orderAmountlist = orderSwapBatteryDao.homeFindAmountData(new HomeRequestDto(DateUtil.beginOfMonth(d), d));
|
||||||
|
if(Collections.isNotEmpty(orderAmountlist)){
|
||||||
|
HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null);
|
||||||
|
if(totalFinishOrder != null){
|
||||||
|
data.setTotalFinishOrderNum(totalFinishOrder.getDataCount());
|
||||||
|
}
|
||||||
|
HomeOrderSwapBatteryAmountDto totalPendingOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(6).equals(i.getStatus())).findFirst().orElse(null);
|
||||||
|
if(totalPendingOrder != null){
|
||||||
|
data.setTotalPendingOrderNum(totalPendingOrder.getDataCount());
|
||||||
|
}
|
||||||
|
data.setTotalOrderNum(defaultValue(data.getTotalFinishOrderNum(),0l)+defaultValue(data.getTotalPendingOrderNum(), 0l));
|
||||||
|
}
|
||||||
|
//近半年走势情况
|
||||||
|
data.setTrendList(orderSwapBatteryDao.homeFindHalfYearStationAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -5), d)).stream().sorted((o1,o2) ->{
|
||||||
|
return o1.getMonth().compareTo(o2.getMonth());
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
return new Result<HomeStationData>().success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<HomeCompanyData> company() {
|
||||||
|
HomeCompanyData data = new HomeCompanyData();
|
||||||
|
// 1. 车辆
|
||||||
|
data.setCarNum(vehicleInfoDao.selectCount(new LambdaQueryWrapper<VehicleInfo>().eq(VehicleInfo::getDelFlag, 0).select(VehicleInfo::getPkId)));
|
||||||
|
//2 人员
|
||||||
|
data.setUserNum(wechatUserDao.selectCount(new LambdaQueryWrapper<WechatUser>().select(WechatUser::getPkId)));
|
||||||
|
//获取待结算订单
|
||||||
|
List<HomeOrderInfo> orderInfo = orderSwapBatteryDao.findOrderListByStatus(6);
|
||||||
|
//待结算订单数量
|
||||||
|
data.setPendingOrderNum(Long.valueOf(orderInfo.size()));
|
||||||
|
//待结算订单金额
|
||||||
|
data.setPendingOrderAmount(orderInfo.stream().collect(Collectors.summingDouble( i-> i.getSwapAmount())));
|
||||||
|
//待结算订单信息
|
||||||
|
data.setOrderList(orderInfo);
|
||||||
|
|
||||||
|
return new Result<HomeCompanyData>().success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
MongoDBService mongoDBService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<List<HomeAlarmData>> alarmData() {
|
||||||
|
List<HomeAlarmData> list = batteryStationDao.selectList(new LambdaQueryWrapper<BatteryStation>().eq(BatteryStation::getDelFlag, 0).eq(BatteryStation::getAlarm, true).select(BatteryStation::getCode, BatteryStation::getName)).stream().map(data -> new HomeAlarmData(data.getName(), data.getCode())).collect(Collectors.toList());
|
||||||
|
list.stream().forEach(alarm ->{
|
||||||
|
List<StationState> alarmList = mongoDBService.find(MongoConstant.STATION_INFO_BASE, StateFunctionTypesEnum.FUN_STATION_STATE.getFunction(), StationState.class, Collections.asMap(MongoConstant.EQ+ MongoConstant.SEPARATION+"stationCode",alarm.getStationCode(), MongoConstant.SORT+ MongoConstant.SEPARATION+MongoConstant.SORT_DESC, "id", MongoConstant.PAGE, "1"+MongoConstant.SEPARATION+"1"));
|
||||||
|
if(Collections.isNotEmpty(alarmList)){
|
||||||
|
StationState stationState= alarmList.get(0);
|
||||||
|
//报警信息
|
||||||
|
JSONObject alarmJSONObject = JSONObject.parseObject(alarmList.get(0).getValue());
|
||||||
|
Integer fire = alarmJSONObject.getInteger("fire");
|
||||||
|
if(MongoConstant.ErrorCode.STATION_ALARM_CODE.equals(fire)){
|
||||||
|
alarm.setAlarmType("消防告警");
|
||||||
|
}else{
|
||||||
|
String smoke = alarmJSONObject.getString("smoke");
|
||||||
|
if(Collections.asList(smoke.split(",")).contains(String.valueOf(MongoConstant.ErrorCode.STATION_ALARM_CODE))){
|
||||||
|
alarm.setAlarmType("烟感告警");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
alarm.setAlarmTime(DateUtil.format(new Date(Long.valueOf(stationState.getId())), "yyyy-MM-dd HH:mm:ss"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return new Result<List<HomeAlarmData>>().success(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<HomeData1> homeData1(HomeDataRequest hd) {
|
public Result<HomeData1> homeData1(HomeDataRequest hd) {
|
||||||
// 1. 运营商
|
// 1. 运营商
|
||||||
@ -190,24 +424,24 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
String month = it.next();
|
String month = it.next();
|
||||||
HomeData6 homeData6 = new HomeData6();
|
HomeData6 homeData6 = new HomeData6();
|
||||||
homeData6.setMonth(month);
|
homeData6.setMonth(month);
|
||||||
List<HomeOrderSwapBatteryHalfYearAmountDto> values = mapList.get(month);
|
// List<HomeOrderSwapBatteryHalfYearAmountDto> values = mapList.get(month);
|
||||||
HomeOrderSwapBatteryHalfYearAmountDto wechat = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(2).equals(f.getPayType())).findFirst().orElse(null);
|
// HomeOrderSwapBatteryHalfYearAmountDto wechat = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(2).equals(f.getPayType())).findFirst().orElse(null);
|
||||||
if(ObjectUtils.isNotEmpty(wechat)){
|
// if(ObjectUtils.isNotEmpty(wechat)){
|
||||||
homeData6.setInQuantity(wechat.getQuantity());
|
// homeData6.setInQuantity(wechat.getQuantity());
|
||||||
homeData6.setInMoney(wechat.getTotalMoney());
|
// homeData6.setInMoney(wechat.getTotalMoney());
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
HomeOrderSwapBatteryHalfYearAmountDto account = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(1).equals(f.getPayType())).findFirst().orElse(null);
|
// HomeOrderSwapBatteryHalfYearAmountDto account = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(1).equals(f.getPayType())).findFirst().orElse(null);
|
||||||
if(ObjectUtils.isNotEmpty(account)){
|
// if(ObjectUtils.isNotEmpty(account)){
|
||||||
homeData6.setWalletQuantity(account.getQuantity());
|
// homeData6.setWalletQuantity(account.getQuantity());
|
||||||
homeData6.setWalletMoney(account.getTotalMoney());
|
// homeData6.setWalletMoney(account.getTotalMoney());
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
List<HomeOrderSwapBatteryHalfYearAmountDto> refund = values.stream().filter(f -> Integer.valueOf(-1).equals(f.getStatus())).collect(Collectors.toList());
|
// List<HomeOrderSwapBatteryHalfYearAmountDto> refund = values.stream().filter(f -> Integer.valueOf(-1).equals(f.getStatus())).collect(Collectors.toList());
|
||||||
if(Collections.isNotEmpty(refund)){
|
// if(Collections.isNotEmpty(refund)){
|
||||||
homeData6.setRefundQuantity(refund.stream().collect(Collectors.summingLong(i -> i.getQuantity())));
|
// homeData6.setRefundQuantity(refund.stream().collect(Collectors.summingLong(i -> i.getQuantity())));
|
||||||
homeData6.setRefundMoney(refund.stream().collect(Collectors.summingDouble(i -> i.getTotalMoney())));
|
// homeData6.setRefundMoney(refund.stream().collect(Collectors.summingDouble(i -> i.getTotalMoney())));
|
||||||
}
|
// }
|
||||||
list.add(homeData6);
|
list.add(homeData6);
|
||||||
}
|
}
|
||||||
list = list.stream().sorted((o1,o2) ->{
|
list = list.stream().sorted((o1,o2) ->{
|
||||||
|
|||||||
@ -385,11 +385,11 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
|||||||
fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP);
|
fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP);
|
||||||
} else if (order.getFeeType() == 2) {
|
} else if (order.getFeeType() == 2) {
|
||||||
// TODO 按SOC
|
// TODO 按SOC
|
||||||
if (order.getReturnBatRentSoc() == null || order.getRentBatSoc() == null) {
|
if (order.getReturnBatSoc() == null || order.getRentBatSoc() == null) {
|
||||||
return new Result<String>().error("充电订单 SOC 异常!");
|
return new Result<String>().error("充电订单 SOC 异常!");
|
||||||
}
|
}
|
||||||
// 计算 SOC
|
// 计算 SOC
|
||||||
BigDecimal socDifference = new BigDecimal(order.getRentBatSoc() - order.getReturnBatRentSoc());
|
BigDecimal socDifference = new BigDecimal(order.getRentBatSoc() - order.getReturnBatSoc());
|
||||||
fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP);
|
fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
} else if (order.getFeeType() == 1) {
|
} else if (order.getFeeType() == 1) {
|
||||||
@ -713,10 +713,9 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
|||||||
public List<OrderSwapBatteryPre> findOrderSwapBatteryPreList(String stationCode) {
|
public List<OrderSwapBatteryPre> findOrderSwapBatteryPreList(String stationCode) {
|
||||||
return orderSwapBatteryPreDao.selectList(new LambdaQueryWrapper<OrderSwapBatteryPre>()
|
return orderSwapBatteryPreDao.selectList(new LambdaQueryWrapper<OrderSwapBatteryPre>()
|
||||||
.eq(OrderSwapBatteryPre::getStationCode, stationCode)
|
.eq(OrderSwapBatteryPre::getStationCode, stationCode)
|
||||||
.ne(OrderSwapBatteryPre::getUcode,"hp_station_push")
|
// .ne(OrderSwapBatteryPre::getUcode,"hp_station_push")
|
||||||
.eq(OrderSwapBatteryPre::getStatus, 1)
|
.eq(OrderSwapBatteryPre::getStatus, 1)
|
||||||
.select(OrderSwapBatteryPre::getUcode)
|
.select(OrderSwapBatteryPre::getUcode,OrderSwapBatteryPre::getPkId,OrderSwapBatteryPre::getPlateNum)
|
||||||
.select(OrderSwapBatteryPre::getPkId)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.evotech.hd.cloud.service.newthread;
|
|||||||
|
|
||||||
import com.evotech.hd.cloud.service.rpc.WechatService;
|
import com.evotech.hd.cloud.service.rpc.WechatService;
|
||||||
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
||||||
|
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||||
@ -9,8 +10,6 @@ import jakarta.annotation.Resource;
|
|||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class GZHTemplateMessageService {
|
public class GZHTemplateMessageService {
|
||||||
|
|
||||||
@ -59,8 +58,8 @@ public class GZHTemplateMessageService {
|
|||||||
* @param money
|
* @param money
|
||||||
*/
|
*/
|
||||||
@Async("taskExecutor")
|
@Async("taskExecutor")
|
||||||
public void serviceStopMessageSend(List<String>wuIds, String reason) {
|
public void serviceStopMessageSend(StopServerTemplateDto stopServerTemplateDto) {
|
||||||
wechatService.serviceStopMessageSend(wuIds, reason);
|
wechatService.serviceStopMessageSend(stopServerTemplateDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,12 @@
|
|||||||
package com.evotech.hd.cloud.service.rpc;
|
package com.evotech.hd.cloud.service.rpc;
|
||||||
|
|
||||||
|
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
||||||
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
||||||
|
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
|
||||||
|
import com.evotech.hd.common.core.entity.Result;
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||||
import org.springdoc.core.annotations.ParameterObject;
|
import org.springdoc.core.annotations.ParameterObject;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
@ -9,14 +15,6 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
|
||||||
import com.evotech.hd.common.core.entity.Result;
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@FeignClient(name = "${WECHAT-SERVER-API-NAME}", path = "${WECHAT-SERVER-API-PATH}")
|
@FeignClient(name = "${WECHAT-SERVER-API-NAME}", path = "${WECHAT-SERVER-API-PATH}")
|
||||||
public interface WechatService {
|
public interface WechatService {
|
||||||
|
|
||||||
@ -61,6 +59,6 @@ public interface WechatService {
|
|||||||
public com.evotech.hd.common.core.Dto.Result<String> alarmMessageSend(@RequestBody AlarmTemplateDto alarmTemplate);
|
public com.evotech.hd.common.core.Dto.Result<String> alarmMessageSend(@RequestBody AlarmTemplateDto alarmTemplate);
|
||||||
|
|
||||||
@PostMapping(value = "/gzh/msg/send/service", consumes = {MediaType.APPLICATION_JSON_VALUE})
|
@PostMapping(value = "/gzh/msg/send/service", consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||||
public com.evotech.hd.common.core.Dto.Result<String> serviceStopMessageSend(@RequestParam List<String> wuIds, @RequestParam String reason);
|
public com.evotech.hd.common.core.Dto.Result<String> serviceStopMessageSend(@RequestBody StopServerTemplateDto stopServerTemplateDto);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,21 +34,20 @@ public class OrderCostCalculateTask {
|
|||||||
public void calculateOrder() {
|
public void calculateOrder() {
|
||||||
log.info("\r\n===>>>开始查找订单计算费用");
|
log.info("\r\n===>>>开始查找订单计算费用");
|
||||||
// 查询状态为5的订单
|
// 查询状态为5的订单
|
||||||
// Boolean flag = true;
|
Boolean flag = true;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
// while (flag) {
|
while (flag) {
|
||||||
List<OrderSwapBattery> list = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
List<OrderSwapBattery> list = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
||||||
.eq("status", 5).ne("del_flag", 1)
|
.eq("status", 5).ne("del_flag", 1)
|
||||||
.ge("order_time", DateUtil.beginOfYear(new Date()))
|
.ge("order_time", DateUtil.beginOfYear(new Date()))
|
||||||
.last("limit 20"));
|
.last("limit 20"));
|
||||||
if (!list.isEmpty()) {
|
if (!list.isEmpty()) {
|
||||||
n = orderCalculate(n, list);
|
n = orderCalculate(n, list);
|
||||||
// flag = false;
|
|
||||||
}
|
}
|
||||||
// else {
|
else {
|
||||||
// flag = false;
|
flag = false;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
log.info("\r\n===>>>订单计算费用完成:{} 条数据", n);
|
log.info("\r\n===>>>订单计算费用完成:{} 条数据", n);
|
||||||
|
|
||||||
@ -63,6 +62,8 @@ public class OrderCostCalculateTask {
|
|||||||
n += 1;
|
n += 1;
|
||||||
// 发送微信消息
|
// 发送微信消息
|
||||||
gzhTemplateMessageService.orderMessageSend2(list.get(i).getPkId(), 2);
|
gzhTemplateMessageService.orderMessageSend2(list.get(i).getPkId(), 2);
|
||||||
|
}else{
|
||||||
|
throw new RuntimeException(res.getMsg());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
|
|||||||
@ -4,22 +4,16 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUnit;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
|
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
|
||||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
|
||||||
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
|
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
|
||||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||||
import com.evotech.hd.common.redis.utils.RedisUtil;
|
import com.evotech.hd.common.redis.utils.RedisUtil;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -119,13 +113,13 @@ public class OrderSwapBatteryTask {
|
|||||||
}
|
}
|
||||||
for (String key : keys) {
|
for (String key : keys) {
|
||||||
try {
|
try {
|
||||||
String id = key.substring(key.lastIndexOf(":") + 1);
|
|
||||||
OrderSwapBatteryPre order = orderSwapBatteryPreDao.selectById(id);
|
|
||||||
if (order != null && order.getStatus() == 1) { // 只处理状态为1的预约单
|
|
||||||
// 获取过期时间
|
// 获取过期时间
|
||||||
Date expireTime = (Date) redisUtil.get(key);
|
Date expireTime = (Date) redisUtil.get(key);
|
||||||
// 如果当前时间接近过期时间(5分钟内)
|
// 如果当前时间接近过期时间(5分钟内)
|
||||||
if (expireTime != null && DateUtil.between(currentTime, expireTime, DateUnit.MINUTE) <= 5) {
|
if (expireTime != null && DateUtil.between(currentTime, expireTime, DateUnit.MINUTE) <= 5) {
|
||||||
|
String id = key.substring(key.lastIndexOf(":") + 1);
|
||||||
|
OrderSwapBatteryPre order = orderSwapBatteryPreDao.selectById(id);
|
||||||
|
if (order != null && order.getStatus() == 1) { // 只处理状态为1的预约单
|
||||||
// 发送微信公众号提醒
|
// 发送微信公众号提醒
|
||||||
templateMessageService.preOrderMessageSend(order);
|
templateMessageService.preOrderMessageSend(order);
|
||||||
reminderCount++;
|
reminderCount++;
|
||||||
|
|||||||
@ -7,10 +7,12 @@
|
|||||||
<result column="name" property="stationName" />
|
<result column="name" property="stationName" />
|
||||||
<result column="code" property="stationCode" />
|
<result column="code" property="stationCode" />
|
||||||
<result column="quantity" property="quantity" />
|
<result column="quantity" property="quantity" />
|
||||||
|
<result column="totalAmount" property="totalAmount" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<resultMap id="homeAmountResultMap" type="com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto">
|
<resultMap id="homeAmountResultMap" type="com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto">
|
||||||
<result column="amount" property="amount" />
|
<result column="amount" property="amount" />
|
||||||
|
<result column="dataCount" property="dataCount" />
|
||||||
<result column="status" property="status" />
|
<result column="status" property="status" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
@ -28,6 +30,28 @@
|
|||||||
<result column="payType" property="payType" />
|
<result column="payType" property="payType" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="findOrderListByStatusMap" type="com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo">
|
||||||
|
<result column="order_time" property="swapTime" />
|
||||||
|
<result column="plate_num" property="swapCar" />
|
||||||
|
<result column="order_pre_uname" property="swapUserName" />
|
||||||
|
<result column="amount" property="swapAmount" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<select id="findOrderListByStatus" resultMap="findOrderListByStatusMap">
|
||||||
|
select order_time,
|
||||||
|
plate_num,
|
||||||
|
order_pre_uname,
|
||||||
|
amount
|
||||||
|
from hd_cloud_manage.yt_t_order_swap_battery osb
|
||||||
|
where del_Flag = 0
|
||||||
|
<if test="status!= null">
|
||||||
|
and status !=#{status}
|
||||||
|
</if>
|
||||||
|
order by order_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="homeFindProportionData" resultMap="homeProportionResultMap">
|
<select id="homeFindProportionData" resultMap="homeProportionResultMap">
|
||||||
select ifnull(count(osb.pk_id),0) as quantity,
|
select ifnull(count(osb.pk_id),0) as quantity,
|
||||||
bs.code,
|
bs.code,
|
||||||
@ -40,12 +64,15 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="homeFindAmountData" resultMap="homeAmountResultMap">
|
<select id="homeFindAmountData" resultMap="homeAmountResultMap">
|
||||||
select osb.amount,
|
-- select osb.amount,
|
||||||
|
-- osb.status
|
||||||
|
select ifnull(sum(osb.amount),0) amount,ifnull(count(osb.pk_id),0) as dataCount,
|
||||||
osb.status
|
osb.status
|
||||||
from hd_cloud_manage.yt_t_order_swap_battery osb
|
from hd_cloud_manage.yt_t_order_swap_battery osb
|
||||||
where DATE_FORMAT(osb.order_time,"%Y-%m-%d") >= DATE_FORMAT(#{params.begin},"%Y-%m-%d")
|
where DATE_FORMAT(osb.order_time,"%Y-%m-%d") >= DATE_FORMAT(#{params.begin},"%Y-%m-%d")
|
||||||
and DATE_FORMAT(#{params.end},"%Y-%m-%d") >= DATE_FORMAT(osb.order_time,"%Y-%m-%d")
|
and DATE_FORMAT(#{params.end},"%Y-%m-%d") >= DATE_FORMAT(osb.order_time,"%Y-%m-%d")
|
||||||
and osb.amount is not null
|
and osb.amount is not null
|
||||||
|
GROUP by osb.status
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="homeFindHalfYearOrderData" resultMap="homeHalfYearResultMap">
|
<select id="homeFindHalfYearOrderData" resultMap="homeHalfYearResultMap">
|
||||||
@ -62,6 +89,32 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="homeFindHalfYearAmountData" resultMap="homeHalfYearAmountResultMap">
|
<select id="homeFindHalfYearAmountData" resultMap="homeHalfYearAmountResultMap">
|
||||||
|
select
|
||||||
|
DATE_FORMAT(osb.order_time,"%Y-%m") as y_m,
|
||||||
|
ifnull(count(osb.pk_id), 0) as quantity,
|
||||||
|
sum(ifnull(osb.amount,0)) as totalMoney
|
||||||
|
from
|
||||||
|
hd_cloud_manage.yt_t_order_swap_battery osb
|
||||||
|
where DATE_FORMAT(osb.order_time,"%Y-%m") >= DATE_FORMAT(#{params.begin},"%Y-%m")
|
||||||
|
and DATE_FORMAT(#{params.end},"%Y-%m") >= DATE_FORMAT(osb.order_time,"%Y-%m")
|
||||||
|
and osb.amount is not null
|
||||||
|
and osb.status = 7
|
||||||
|
GROUP by y_m
|
||||||
|
</select>
|
||||||
|
<select id="homeFindHalfYearStationAmountData" resultMap="homeHalfYearAmountResultMap">
|
||||||
|
select
|
||||||
|
DATE_FORMAT(osb.order_time,"%Y-%m") as y_m,
|
||||||
|
ifnull(count(osb.pk_id), 0) as quantity
|
||||||
|
from
|
||||||
|
hd_cloud_manage.yt_t_order_swap_battery osb
|
||||||
|
where DATE_FORMAT(osb.order_time,"%Y-%m") >= DATE_FORMAT(#{params.begin},"%Y-%m")
|
||||||
|
and DATE_FORMAT(#{params.end},"%Y-%m") >= DATE_FORMAT(osb.order_time,"%Y-%m")
|
||||||
|
and osb.amount is not null
|
||||||
|
and osb.status = 7
|
||||||
|
GROUP by y_m
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--<select id="homeFindHalfYearAmountData" resultMap="homeHalfYearAmountResultMap">
|
||||||
select
|
select
|
||||||
DATE_FORMAT(osb.order_time,"%Y-%m") as y_m,
|
DATE_FORMAT(osb.order_time,"%Y-%m") as y_m,
|
||||||
ifnull(count(osb.pk_id), 0) as quantity,
|
ifnull(count(osb.pk_id), 0) as quantity,
|
||||||
@ -78,7 +131,7 @@
|
|||||||
and td.pay_type IS not null
|
and td.pay_type IS not null
|
||||||
and osb.status in (-1,7)
|
and osb.status in (-1,7)
|
||||||
GROUP by y_m,osb.status,td.pay_type
|
GROUP by y_m,osb.status,td.pay_type
|
||||||
</select>
|
</select>-->
|
||||||
|
|
||||||
|
|
||||||
<select id="homeFindOrderCountData" resultType="java.lang.Long" >
|
<select id="homeFindOrderCountData" resultType="java.lang.Long" >
|
||||||
|
|||||||
@ -35,6 +35,8 @@ public class GZHProperties {
|
|||||||
private String orderToPayTemplateId2;
|
private String orderToPayTemplateId2;
|
||||||
|
|
||||||
private String WalletBackTemplateId;
|
private String WalletBackTemplateId;
|
||||||
|
//站点报警, 通知负责人
|
||||||
private String alarmTemplateId;
|
private String alarmTemplateId;
|
||||||
|
//暂停服务, 通知预约单客户通知
|
||||||
|
private String stopServerTemplateId;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +1,23 @@
|
|||||||
package com.evotech.hd.wechat.controller;
|
package com.evotech.hd.wechat.controller;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.evotech.hd.common.core.entity.cloud.Company;
|
|
||||||
import com.evotech.hd.wechat.service.rpc.CloudService;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import org.springdoc.core.annotations.ParameterObject;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||||
import com.evotech.hd.common.core.entity.Result;
|
import com.evotech.hd.common.core.entity.Result;
|
||||||
|
import com.evotech.hd.common.core.entity.cloud.Company;
|
||||||
import com.evotech.hd.common.core.entity.cloud.WalletAccount;
|
import com.evotech.hd.common.core.entity.cloud.WalletAccount;
|
||||||
import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail;
|
import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail;
|
||||||
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
||||||
import com.evotech.hd.wechat.service.WechatUserService;
|
import com.evotech.hd.wechat.service.WechatUserService;
|
||||||
|
import com.evotech.hd.wechat.service.rpc.CloudService;
|
||||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import org.springdoc.core.annotations.ParameterObject;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Tag(name = "微信用户")
|
@Tag(name = "微信用户")
|
||||||
@RestController
|
@RestController
|
||||||
@ -71,7 +65,7 @@ public class WechatUserController {
|
|||||||
@Operation(summary = "查询钱包账户")
|
@Operation(summary = "查询钱包账户")
|
||||||
@PostMapping("/wallet/list")
|
@PostMapping("/wallet/list")
|
||||||
@ApiOperationSupport(order = 5)
|
@ApiOperationSupport(order = 5)
|
||||||
public Result<List<WalletAccount>> listWallet(String wuid, HttpServletRequest request) {
|
public Result<List<WalletAccount>> listWallet(@RequestParam(name = "wuid") String wuid, HttpServletRequest request) {
|
||||||
return wechatUserService.listWallet(wuid, request);
|
return wechatUserService.listWallet(wuid, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,7 @@
|
|||||||
package com.evotech.hd.wechat.controller.gzh;
|
package com.evotech.hd.wechat.controller.gzh;
|
||||||
|
|
||||||
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
||||||
import org.springdoc.core.annotations.ParameterObject;
|
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import com.evotech.hd.common.core.entity.Result;
|
import com.evotech.hd.common.core.entity.Result;
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||||
@ -15,13 +9,12 @@ import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
|||||||
import com.evotech.hd.wechat.service.gzh.GZHMessageTemplateService;
|
import com.evotech.hd.wechat.service.gzh.GZHMessageTemplateService;
|
||||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.Hidden;
|
import io.swagger.v3.oas.annotations.Hidden;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springdoc.core.annotations.ParameterObject;
|
||||||
import java.util.List;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@Tag(name = "公众号发送消息")
|
@Tag(name = "公众号发送消息")
|
||||||
@RestController
|
@RestController
|
||||||
@ -88,8 +81,8 @@ public class GZHMessageSendController {
|
|||||||
@Operation(summary = "站端停止服务, 推送客户")
|
@Operation(summary = "站端停止服务, 推送客户")
|
||||||
@PostMapping("/service")
|
@PostMapping("/service")
|
||||||
@ApiOperationSupport(order = 6)
|
@ApiOperationSupport(order = 6)
|
||||||
public com.evotech.hd.common.core.Dto.Result<String> serviceStopMessageSend(@RequestParam List<String> wuIds, @RequestParam String reason) {
|
public com.evotech.hd.common.core.Dto.Result<String> serviceStopMessageSend(@RequestBody StopServerTemplateDto stopServerTemplateDto) {
|
||||||
return gzhMessageTemplateService.sendTemplateServiceStop(wuIds, reason);
|
return gzhMessageTemplateService.sendTemplateServiceStop(stopServerTemplateDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
package com.evotech.hd.wechat.entity.gzh.templatemessage;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 站端报警通知类
|
||||||
|
* @ClassName:AlarmMessageTemplateData
|
||||||
|
* @date: 2025年05月05日 17:24
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class StopServerMessageTemplateData {
|
||||||
|
/***
|
||||||
|
* 站点名称
|
||||||
|
*/
|
||||||
|
private JSONObject thing1;
|
||||||
|
/***
|
||||||
|
* 车牌号
|
||||||
|
*/
|
||||||
|
private JSONObject car_number2;
|
||||||
|
/***
|
||||||
|
* 取消原因
|
||||||
|
*/
|
||||||
|
private JSONObject const3;
|
||||||
|
/***
|
||||||
|
* 报警时间
|
||||||
|
*/
|
||||||
|
private JSONObject time4;
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package com.evotech.hd.wechat.entity.gzh.templatemessage;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 站端报警通知类
|
||||||
|
* @ClassName:AlarmMessageTemplateData
|
||||||
|
* @date: 2025年05月05日 17:24
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class StopServerSendAdminMessageTemplateData {
|
||||||
|
/***
|
||||||
|
* 站点名称
|
||||||
|
*/
|
||||||
|
private JSONObject thing1;
|
||||||
|
/***
|
||||||
|
* 温馨提示
|
||||||
|
*/
|
||||||
|
private JSONObject thing3;
|
||||||
|
/***
|
||||||
|
* 下线时间
|
||||||
|
*/
|
||||||
|
private JSONObject time4;
|
||||||
|
}
|
||||||
@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.evotech.hd.common.core.Dto.ResultUtil;
|
import com.evotech.hd.common.core.Dto.ResultUtil;
|
||||||
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
||||||
|
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
|
||||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||||
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
||||||
import com.evotech.hd.common.core.entity.Result;
|
import com.evotech.hd.common.core.entity.Result;
|
||||||
@ -285,7 +286,6 @@ public class GZHMessageTemplateService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public com.evotech.hd.common.core.Dto.Result<String> sendTemplateMessageAlarm(AlarmTemplateDto alarmTemplateDto) {
|
public com.evotech.hd.common.core.Dto.Result<String> sendTemplateMessageAlarm(AlarmTemplateDto alarmTemplateDto) {
|
||||||
|
|
||||||
Map<String, String> gzhOpenIdMap = wechatUserDao.selectList(new LambdaQueryWrapper<WechatUser>().in(WechatUser::getWuid, alarmTemplateDto.getWuid()).isNotNull(WechatUser::getGzhOpenid).select(WechatUser::getWuid, WechatUser::getGzhOpenid)).stream().collect(Collectors.toMap(WechatUser::getWuid,WechatUser::getGzhOpenid, (d1,d2) -> d1));
|
Map<String, String> gzhOpenIdMap = wechatUserDao.selectList(new LambdaQueryWrapper<WechatUser>().in(WechatUser::getWuid, alarmTemplateDto.getWuid()).isNotNull(WechatUser::getGzhOpenid).select(WechatUser::getWuid, WechatUser::getGzhOpenid)).stream().collect(Collectors.toMap(WechatUser::getWuid,WechatUser::getGzhOpenid, (d1,d2) -> d1));
|
||||||
if (Collections.isEmpty(gzhOpenIdMap)) {
|
if (Collections.isEmpty(gzhOpenIdMap)) {
|
||||||
return new com.evotech.hd.common.core.Dto.Result<String>().error(CodeMsg.PARAM_IS_NULL,"当前工作人员没有关注服务号");
|
return new com.evotech.hd.common.core.Dto.Result<String>().error(CodeMsg.PARAM_IS_NULL,"当前工作人员没有关注服务号");
|
||||||
@ -334,16 +334,72 @@ public class GZHMessageTemplateService {
|
|||||||
* 告警信息推送公众号消息
|
* 告警信息推送公众号消息
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public com.evotech.hd.common.core.Dto.Result<String> sendTemplateServiceStop(List<String> wuIds, String reason) {
|
public com.evotech.hd.common.core.Dto.Result<String> sendTemplateServiceStop(StopServerTemplateDto stopServerTemplateDto) {
|
||||||
|
//因检修原因站点暂停运营,请预约其他站点
|
||||||
|
//因调试原因站点暂停运营,请预约其他站点
|
||||||
|
StringBuilder error = new StringBuilder("");
|
||||||
|
if(Collections.isNotEmpty(stopServerTemplateDto.getPlateNum())){
|
||||||
|
Map<String, String> gzhOpenIdMap = wechatUserDao.selectList(new LambdaQueryWrapper<WechatUser>().in(WechatUser::getWuid, stopServerTemplateDto.getPlateNum().keySet()).isNotNull(WechatUser::getGzhOpenid).select(WechatUser::getWuid, WechatUser::getGzhOpenid)).stream().collect(Collectors.toMap(WechatUser::getWuid,WechatUser::getGzhOpenid, (d1,d2) -> d1));
|
||||||
|
if (Collections.isNotEmpty(gzhOpenIdMap)) {
|
||||||
|
//组装数据
|
||||||
|
StopServerMessageTemplateData data = new StopServerMessageTemplateData();
|
||||||
|
data.setThing1(JSONUtil.parseObj(Collections.asMap("value", stopServerTemplateDto.getStationName())));
|
||||||
|
data.setConst3(JSONUtil.parseObj(Collections.asMap("value", stopServerTemplateDto.getReason())));
|
||||||
|
data.setTime4(JSONUtil.parseObj(Collections.asMap("value", DateUtil.format(new Date(),"yyy年MM月dd HH:mm"))));
|
||||||
|
|
||||||
return new com.evotech.hd.common.core.Dto.Result<String>().success("模版审核中, 暂时不做");
|
String templateId = gzhProperties.getStopServerTemplateId();
|
||||||
|
List<String> errorGzhOpenIdList = Collections.emptyList();
|
||||||
|
gzhOpenIdMap.keySet().forEach(wuId ->{
|
||||||
|
data.setCar_number2(JSONUtil.parseObj(Collections.asMap("value", stopServerTemplateDto.getPlateNum().get(wuId))));//动态跟换车牌号
|
||||||
|
String result = ResultUtil.getValue(sendTemplateMessage(gzhOpenIdMap.get(wuId),templateId, JSONUtil.parseObj(data),true));
|
||||||
|
if(org.apache.commons.lang3.StringUtils.isEmpty(result)){
|
||||||
|
errorGzhOpenIdList.add(gzhOpenIdMap.get(wuId));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(Collections.isNotEmpty(errorGzhOpenIdList)){
|
||||||
|
error.append("以下公众号ID推送取消预约单信息失败了").append(String.join(",", errorGzhOpenIdList)).append(";");
|
||||||
|
}
|
||||||
|
|
||||||
// Map<String, String> gzhOpenIdMap = wechatUserDao.selectList(new LambdaQueryWrapper<WechatUser>().in(WechatUser::getWuid, wuIds).isNotNull(WechatUser::getGzhOpenid).select(WechatUser::getWuid, WechatUser::getGzhOpenid)).stream().collect(Collectors.toMap(WechatUser::getWuid,WechatUser::getGzhOpenid, (d1,d2) -> d1));
|
Iterator<String> iterator = stopServerTemplateDto.getPlateNum().keySet().iterator();
|
||||||
// if (Collections.isEmpty(gzhOpenIdMap)) {
|
List<String> existsGzhOpenIdList = gzhOpenIdMap.keySet().stream().collect(Collectors.toList());
|
||||||
// return new com.evotech.hd.common.core.Dto.Result<String>().error(CodeMsg.PARAM_IS_NULL,"当前预约客户没有关注服务号");
|
while (iterator.hasNext()) {
|
||||||
|
String key = iterator.next();
|
||||||
|
if (existsGzhOpenIdList.contains(key)) {
|
||||||
|
iterator.remove(); // 删除当前迭代的元素"b"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//去掉存在gzhopenid的wuid对象
|
||||||
|
List<String> oldWuIdList = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if(Collections.isNotEmpty(oldWuIdList)){
|
||||||
|
error.append("以下用户ID没有关注公众号").append(String.join(",", oldWuIdList)).append(";");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// if(Collections.isNotEmpty(stopServerTemplateDto.getAdminWuId())){
|
||||||
|
// Map<String, String> gzhOpenIdMap = wechatUserDao.selectList(new LambdaQueryWrapper<WechatUser>().in(WechatUser::getWuid, stopServerTemplateDto.getAdminWuId()).isNotNull(WechatUser::getOpenid).select(WechatUser::getWuid, WechatUser::getOpenid)).stream().collect(Collectors.toMap(WechatUser::getWuid,WechatUser::getOpenid, (d1,d2) -> d1));
|
||||||
|
// if (Collections.isNotEmpty(gzhOpenIdMap)) {
|
||||||
|
// //组装数据
|
||||||
|
// StopServerSendAdminMessageTemplateData data = new StopServerSendAdminMessageTemplateData();
|
||||||
|
// data.setThing1(JSONUtil.parseObj(Collections.asMap("value", stopServerTemplateDto.getStationName())));
|
||||||
|
// data.setThing3(JSONUtil.parseObj(Collections.asMap("value", stopServerTemplateDto.getReason())));
|
||||||
|
// data.setTime4(JSONUtil.parseObj(Collections.asMap("value", DateUtil.format(new Date(),"yyy年MM月dd HH:mm"))));
|
||||||
|
//
|
||||||
|
//// String templateId = gzhProperties.getStopServerTemplateId();
|
||||||
|
// List<String> errorGzhOpenIdList = Collections.emptyList();
|
||||||
|
// gzhOpenIdMap.keySet().forEach(wuId ->{
|
||||||
|
// String result = ResultUtil.getValue(sendTemplateMessage(false, gzhOpenIdMap.get(wuId),"HpPsQpeS5zlneMEaWyiB2k3m_tF8gpkzGuN5SkRV6rI", JSONUtil.parseObj(data),true));
|
||||||
|
// if(org.apache.commons.lang3.StringUtils.isEmpty(result)){
|
||||||
|
// errorGzhOpenIdList.add(gzhOpenIdMap.get(wuId));
|
||||||
// }
|
// }
|
||||||
// StringBuilder error = new StringBuilder("");
|
// });
|
||||||
// Iterator<String> iterator = wuIds.iterator();
|
// if(Collections.isNotEmpty(errorGzhOpenIdList)){
|
||||||
|
// error.append("以下工作人员推送站点关闭消息失败了").append(String.join(",", errorGzhOpenIdList)).append(";");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Iterator<String> iterator = stopServerTemplateDto.getAdminWuId().iterator();
|
||||||
// List<String> existsGzhOpenIdList = gzhOpenIdMap.keySet().stream().collect(Collectors.toList());
|
// List<String> existsGzhOpenIdList = gzhOpenIdMap.keySet().stream().collect(Collectors.toList());
|
||||||
// while (iterator.hasNext()) {
|
// while (iterator.hasNext()) {
|
||||||
// String key = iterator.next();
|
// String key = iterator.next();
|
||||||
@ -355,33 +411,24 @@ public class GZHMessageTemplateService {
|
|||||||
// List<String> oldWuIdList = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
|
// List<String> oldWuIdList = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
|
||||||
// .collect(Collectors.toList());
|
// .collect(Collectors.toList());
|
||||||
// if(Collections.isNotEmpty(oldWuIdList)){
|
// if(Collections.isNotEmpty(oldWuIdList)){
|
||||||
// error.append("以下用户ID没有关注公众号").append(String.join(",", oldWuIdList)).append(";");
|
// error.append("以下工作人员没有关注公众号").append(String.join(",", oldWuIdList)).append(";");
|
||||||
// }
|
// }
|
||||||
//
|
|
||||||
// AlarmMessageTemplateData data = new AlarmMessageTemplateData();
|
|
||||||
// String templateId = gzhProperties.getWalletBackTemplateId();
|
|
||||||
// List<String> errorGzhOpenIdList = Collections.emptyList();
|
|
||||||
// gzhOpenIdMap.values().forEach(gzhOpenId ->{
|
|
||||||
// String result = ResultUtil.getValue(sendTemplateMessage( gzhOpenId,templateId,JSONUtil.parseObj(data),true));
|
|
||||||
// if(org.apache.commons.lang3.StringUtils.isEmpty(result)){
|
|
||||||
// errorGzhOpenIdList.add(gzhOpenId);
|
|
||||||
// }
|
// }
|
||||||
// });
|
|
||||||
// if(Collections.isNotEmpty(errorGzhOpenIdList)){
|
|
||||||
// error.append("以下公众号ID推送站端停止运营消息失败了").append(String.join(",", errorGzhOpenIdList)).append(";");
|
|
||||||
// }
|
// }
|
||||||
//
|
|
||||||
// if(org.apache.commons.lang3.StringUtils.isNotEmpty(error)){
|
if(org.apache.commons.lang3.StringUtils.isNotEmpty(error)){
|
||||||
// return new com.evotech.hd.common.core.Dto.Result<String>().error(CodeMsg.PARAM_IS_NULL,error.toString());
|
return new com.evotech.hd.common.core.Dto.Result<String>().error(CodeMsg.PARAM_IS_NULL,error.toString());
|
||||||
// }
|
}
|
||||||
// return new com.evotech.hd.common.core.Dto.Result<String>().success("成功");
|
return new com.evotech.hd.common.core.Dto.Result<String>().success("成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private com.evotech.hd.common.core.Dto.Result<String> sendTemplateMessage(String gzhOpenId, String templateId, JSONObject templateData, Boolean isJumpApplet){
|
private com.evotech.hd.common.core.Dto.Result<String> sendTemplateMessage(String gzhOpenId, String templateId, JSONObject templateData, Boolean isJumpApplet){
|
||||||
|
return sendTemplateMessage(true, gzhOpenId, templateId, templateData, isJumpApplet);
|
||||||
|
}
|
||||||
|
|
||||||
|
private com.evotech.hd.common.core.Dto.Result<String> sendTemplateMessage(Boolean isTemplate, String gzhOpenId, String templateId, JSONObject templateData, Boolean isJumpApplet){
|
||||||
MessageTemplateSendData sendData = new MessageTemplateSendData();
|
MessageTemplateSendData sendData = new MessageTemplateSendData();
|
||||||
sendData.setTouser(gzhOpenId);
|
sendData.setTouser(gzhOpenId);
|
||||||
sendData.setTemplate_id(templateId);
|
sendData.setTemplate_id(templateId);
|
||||||
@ -392,8 +439,13 @@ public class GZHMessageTemplateService {
|
|||||||
miniprogram.setPath(orderPage);
|
miniprogram.setPath(orderPage);
|
||||||
sendData.setMiniprogram(miniprogram);
|
sendData.setMiniprogram(miniprogram);
|
||||||
}
|
}
|
||||||
|
String res = null;
|
||||||
|
if(isTemplate){
|
||||||
|
res = TemplateMessageUtil.templateMessageSend(gzhAccessTokenService.gzhAccessToken(), sendData);
|
||||||
|
}else{
|
||||||
|
res = TemplateMessageUtil.templateMessageSendGZH(gzhAccessTokenService.gzhAccessToken(), sendData);
|
||||||
|
}
|
||||||
|
|
||||||
String res = TemplateMessageUtil.templateMessageSend(gzhAccessTokenService.gzhAccessToken(), sendData);
|
|
||||||
JSONObject jo = JSONUtil.parseObj(res);
|
JSONObject jo = JSONUtil.parseObj(res);
|
||||||
if (jo.getInt("errcode") == 0) {
|
if (jo.getInt("errcode") == 0) {
|
||||||
return new com.evotech.hd.common.core.Dto.Result<String>().success(jo.toString());
|
return new com.evotech.hd.common.core.Dto.Result<String>().success(jo.toString());
|
||||||
|
|||||||
@ -27,4 +27,22 @@ public class TemplateMessageUtil {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static String templateGetcategorySendUrl = "https://api.weixin.qq.com/wxaapi/newtmpl/getcategory?access_token=";
|
||||||
|
/**
|
||||||
|
* 发送模板消息 POST
|
||||||
|
* @param accessToken
|
||||||
|
* @param templateData
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String templateMessageSendGZH(String accessToken, MessageTemplateSendData templateData) {
|
||||||
|
String body = JSONUtil.toJsonStr(templateData);
|
||||||
|
String res = HttpRequest.post(templateGetcategorySendUrl + accessToken)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.body(body)
|
||||||
|
.execute()
|
||||||
|
.body();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -127,3 +127,4 @@ hbyt:
|
|||||||
order_to_pay_template_id2: K6cdaBOkxGJpah0vsz5rq5UBID04mk-eEWp2XM0KyA0
|
order_to_pay_template_id2: K6cdaBOkxGJpah0vsz5rq5UBID04mk-eEWp2XM0KyA0
|
||||||
wallet_back_template_id: aO9GDhgIcYnCDCpsVSMB-CeXG3J4JzHlOUV2bhOAvVI
|
wallet_back_template_id: aO9GDhgIcYnCDCpsVSMB-CeXG3J4JzHlOUV2bhOAvVI
|
||||||
alarm_template_id: 8vW_gOzoOMzlJqvtSOF0fLeNm8Z6pttJG63oeFe1gq4
|
alarm_template_id: 8vW_gOzoOMzlJqvtSOF0fLeNm8Z6pttJG63oeFe1gq4
|
||||||
|
stop_server_template_id: RVrVqa9Y8-AjOCHxp9LWAnYejjphZhLoHJr0pU2nReo
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user