1. 增加流程测试数据,从预约-换电-充电-结算整个流程
2. 生成测试数据,大数据量测试 3. 增加企业用户批量订单支付功能 4. 调整首页数据查询方式,增加 订单和交易的 中间表 来进行按日期等条件的多维度中间表数据,提升首页数据的查询数据 5. 优化系统实现流程 6. 修改换电流程中的2处bug
This commit is contained in:
parent
151220705c
commit
d095c7d457
@ -0,0 +1,12 @@
|
||||
package com.evotech.hd.common.core.dao.cloud;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.evotech.hd.common.core.entity.cloud.HomeDataOrderSwapCollate;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
* @since 2025-03-07
|
||||
*/
|
||||
public interface HomeDataOrderSwapCollateDao extends BaseMapper<HomeDataOrderSwapCollate> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.evotech.hd.common.core.dao.cloud;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.evotech.hd.common.core.entity.cloud.HomeDataTradeCollate;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
* @since 2025-03-08
|
||||
*/
|
||||
public interface HomeDataTradeCollateDao extends BaseMapper<HomeDataTradeCollate> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.evotech.hd.common.core.dao.cloud;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
* @since 2024-11-20
|
||||
*/
|
||||
public interface PreOrderRelationSwapOrderDao extends BaseMapper<PreOrderRelationSwapOrder> {
|
||||
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
package com.evotech.hd.resource.dao;
|
||||
package com.evotech.hd.common.core.dao.resource;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.evotech.hd.resource.entity.BatteryType;
|
||||
import com.evotech.hd.common.core.entity.resource.BatteryType;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
@ -1,7 +1,7 @@
|
||||
package com.evotech.hd.resource.dao;
|
||||
package com.evotech.hd.common.core.dao.resource;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.evotech.hd.resource.entity.CarType;
|
||||
import com.evotech.hd.common.core.entity.resource.CarType;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
@ -62,14 +62,20 @@ public class BatteryStationDc implements Serializable {
|
||||
@NotNull(message = "状态不能为空")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "换电站编码")
|
||||
private String stationCode;
|
||||
@Schema(description = "轨迹点类型:1-电站,2-车辆")
|
||||
private Integer pointType;
|
||||
|
||||
@Schema(description = "换电站名称")
|
||||
private String stationName;
|
||||
@Schema(description = "轨迹点编码")
|
||||
private String pointCode;
|
||||
|
||||
@Schema(description = "轨迹点名称")
|
||||
private String pointName;
|
||||
|
||||
@Schema(description = "当前电量")
|
||||
private Integer soc;
|
||||
|
||||
@Schema(description = "电池仓位号")
|
||||
private Integer dccNo;
|
||||
|
||||
@Schema(description = "删除标志:1-已删除,0-未删除", hidden = true)
|
||||
private Integer delFlag;
|
||||
|
||||
@ -51,6 +51,12 @@ public class BatteryTrace implements Serializable {
|
||||
@Schema(description = "轨迹点名称", requiredMode = RequiredMode.REQUIRED)
|
||||
@NotBlank
|
||||
private String pointName;
|
||||
|
||||
@Schema(description = "电池编码")
|
||||
private String orderNo;
|
||||
|
||||
@Schema(description = "轨迹点类型:1-电站,2-车辆")
|
||||
private Integer soc;
|
||||
|
||||
@Schema(description = "结束时间", example = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
package com.evotech.hd.common.core.entity.cloud;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
* @since 2025-03-07
|
||||
*/
|
||||
@Data
|
||||
@TableName("yt_t_home_data_order_swap_collate")
|
||||
@Schema(name = "首页数据-换电订单中间表")
|
||||
public class HomeDataOrderSwapCollate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId("pk_id")
|
||||
private Integer pkId;
|
||||
|
||||
@Schema(description = "站编码")
|
||||
private String stationCode;
|
||||
|
||||
@Schema(description = "站名称")
|
||||
private String stationName;
|
||||
|
||||
@Schema(description = "日期")
|
||||
private String day;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer quantity;
|
||||
|
||||
@Schema(description = "状态:1-进行中,未结算的,2-结算完成,3-取消的")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "创建时间", hidden = true)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date ctime;
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package com.evotech.hd.common.core.entity.cloud;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
* @since 2025-03-08
|
||||
*/
|
||||
@Data
|
||||
@TableName("yt_t_home_data_trade_collate")
|
||||
@Schema(name = "首页数据-交易中间表")
|
||||
public class HomeDataTradeCollate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "pk_id", type = IdType.AUTO)
|
||||
private Integer pkId;
|
||||
|
||||
@Schema(description = "日期")
|
||||
private String day;
|
||||
|
||||
@Schema(description = "交易类型:1-充值,2-订单消费,9-提现")
|
||||
private Integer tradeType;
|
||||
|
||||
@Schema(description = "支付方式:1-账户余额,2-微信,3-支付宝,4-网银,5 -充电补偿")
|
||||
private Integer payType;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer quantity;
|
||||
|
||||
@Schema(description = "交易金额")
|
||||
private Integer tradeAmount;
|
||||
|
||||
@Schema(description = "创建时间", hidden = true)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date ctime;
|
||||
}
|
||||
@ -51,6 +51,9 @@ public class PageListSwapOrderRequest extends BasePageRequest {
|
||||
|
||||
@Schema(description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "公司编码")
|
||||
private String ccode;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
package com.evotech.hd.common.core.entity.cloud;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author zrb
|
||||
* @since 2024-11-06
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("hd_cloud_manage.yt_t_pre_order_relation_swap_order")
|
||||
@Schema(name = "扫码支付时关联的换电订单号")
|
||||
public class PreOrderRelationSwapOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "pk_id", type = IdType.AUTO)
|
||||
private Integer pkId;
|
||||
|
||||
@Schema(description = "微信支付方式")
|
||||
private String payApiType = "NATIVE";
|
||||
|
||||
@Schema(description = "本地订单号")
|
||||
private String outTradeNo;
|
||||
|
||||
@Schema(description = "订单描述")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "换电订单号")
|
||||
private String orderNo;
|
||||
|
||||
@Schema(description = "创建时间", hidden = true)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date ctime;
|
||||
}
|
||||
@ -97,6 +97,12 @@ public class VehicleInfo implements Serializable {
|
||||
@Schema(description = "删除状态,1-已删除,0-未删除", hidden = true)
|
||||
private Integer delFlag;
|
||||
|
||||
@Schema(description = "电池编码")
|
||||
private String batCode;
|
||||
|
||||
@Schema(description = "电量")
|
||||
private Integer batSoc;
|
||||
|
||||
@Schema(description = "公司名称")
|
||||
private String cname;
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.evotech.hd.resource.entity;
|
||||
package com.evotech.hd.common.core.entity.resource;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@ -22,7 +22,7 @@ import lombok.Setter;
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("yt_d_battery_type")
|
||||
@TableName("hd_resource.yt_d_battery_type")
|
||||
@Schema(name = "电池型号表")
|
||||
public class BatteryType implements Serializable {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.evotech.hd.resource.entity;
|
||||
package com.evotech.hd.common.core.entity.resource;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@ -22,7 +22,7 @@ import lombok.Setter;
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("yt_d_car_type")
|
||||
@TableName("hd_resource.yt_d_car_type")
|
||||
@Schema(name = "车辆类型")
|
||||
public class CarType implements Serializable {
|
||||
|
||||
@ -29,6 +29,9 @@ public class WechatPayPreOrder implements Serializable {
|
||||
|
||||
@Schema(description = "用户编码")
|
||||
private String wuid;
|
||||
|
||||
@Schema(description = "公司编码")
|
||||
private String ccode;
|
||||
|
||||
private String openid;
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ public class CommonUtil {
|
||||
*/
|
||||
/**
|
||||
* 交易编码:30位,预留2位不用
|
||||
* @param type 1-微信支付 9-余额支付
|
||||
* @param type 交易类型:1-充值,2-订单付款-余额,21-订单付款-JSAPI,21-订单付款-NATIVE, 9-提现
|
||||
* @return
|
||||
*/
|
||||
public static String payTradeNo(Integer type) {
|
||||
@ -24,21 +24,27 @@ public class CommonUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额支付交易编码 1-充值,2-订单消费,9-提现
|
||||
* type:交易类型:1-充值,2-订单付款-余额,21-订单付款-JSAPI,21-订单付款-NATIVE, 9-提现
|
||||
* @return
|
||||
*/
|
||||
public static String tradeNoPrefix(Integer type) {
|
||||
String prefix = "YTHD";
|
||||
if (type == 1) {
|
||||
return prefix + "1001";
|
||||
return prefix + "1010";
|
||||
}
|
||||
if (type == 2) {
|
||||
return prefix + "1002";
|
||||
return prefix + "1020";
|
||||
}
|
||||
if (type == 21) {
|
||||
return prefix + "1021";
|
||||
}
|
||||
if (type == 22) {
|
||||
return prefix + "1022";
|
||||
}
|
||||
if (type == 9) {
|
||||
return prefix + "1009";
|
||||
return prefix + "1090";
|
||||
}
|
||||
return prefix + "1010";
|
||||
return prefix + "1100";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -14,12 +14,11 @@ public class XCXUtil {
|
||||
|
||||
/**
|
||||
* 微信支付订单号
|
||||
* @param stationCode
|
||||
* @param type 交易类型:1-充值,2-订单付款-余额,21-订单付款-JSAPI,21-订单付款-NATIVE, 9-提现
|
||||
* @return
|
||||
*/
|
||||
public static String payOutTradeNo(String stationCode) {
|
||||
return CommonUtil.payTradeNo(1);
|
||||
// String prefix = "YTHD" + (StringUtils.hasText(stationCode)?stationCode.substring(stationCode.length() - 4):"1001");
|
||||
public static String payOutTradeNo(Integer type) {
|
||||
return CommonUtil.payTradeNo(type);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -83,6 +83,7 @@
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-crypto</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -5,10 +5,12 @@ import java.util.List;
|
||||
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.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.cloud.entity.vo.NativePayVO;
|
||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
@ -18,6 +20,7 @@ import com.evotech.hd.common.core.entity.cloud.PageListSwapOrderRequest;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Hidden;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -83,7 +86,16 @@ public class OrderSwapBatteryController {
|
||||
@GetMapping("/list")
|
||||
@ApiOperationSupport(order = 7)
|
||||
public Result<List<OrderSwapBattery>> list(@ParameterObject PageListSwapOrderRequest plsor) {
|
||||
return orderSwapBatteryService.list(plsor);
|
||||
return orderSwapBatteryService.list(plsor);
|
||||
}
|
||||
|
||||
@Operation(summary = "查询公司订单")
|
||||
@GetMapping("/listcompanyorder")
|
||||
@ApiOperationSupport(order = 7)
|
||||
@Hidden
|
||||
@Deprecated
|
||||
public Result<List<OrderSwapBattery>> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) {
|
||||
return orderSwapBatteryService.listByCompany(plsor);
|
||||
}
|
||||
|
||||
@Operation(summary = "查询换电步骤")
|
||||
@ -109,11 +121,26 @@ public class OrderSwapBatteryController {
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "公司账户余额支付")
|
||||
@Operation(summary = "公司订单余额支付")
|
||||
@PostMapping({"/companywallet/pay"})
|
||||
@ApiOperationSupport(order = 11)
|
||||
public Result<String> companyWalletPay(@RequestParam String orderNo, String wuid, String uname) {
|
||||
return orderSwapBatteryService.calculateCost(orderNo);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "公司订单扫码支付")
|
||||
@PostMapping({"/wechat/nativepay"})
|
||||
@ApiOperationSupport(order = 12)
|
||||
public Result<String> companyNativePay(@RequestBody NativePayVO prePay) {
|
||||
return orderSwapBatteryService.companyNativePay(prePay);
|
||||
}
|
||||
|
||||
@Operation(summary = "扫码支付订单查询状态")
|
||||
@GetMapping("/paystatus/query")
|
||||
@ApiOperationSupport(order = 13)
|
||||
public Result<String> orderQuery(String outTradeNo) {
|
||||
return orderSwapBatteryService.orderQuery(outTradeNo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package com.evotech.hd.cloud.controller.test;
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
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.cloud.service.HomeDataManualCollateService;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@Tag(name = "首页数据手动整理中间表")
|
||||
@ApiSupport(order = 701)
|
||||
@RestController
|
||||
@RequestMapping("/home/data/manual")
|
||||
public class HomeDataManualCollateController {
|
||||
|
||||
@Resource
|
||||
private HomeDataManualCollateService homeDataManualCollateService;
|
||||
|
||||
@Operation(summary = "换电订单按日期整理")
|
||||
@PostMapping("/swaporder/collate")
|
||||
@ApiOperationSupport(order = 1)
|
||||
public Result<String> orderSwapDataCollate(@RequestParam(required = true) String dayBegin, @RequestParam(required = true)String dayEnd, @RequestParam(required = false)String stationCode) {
|
||||
return homeDataManualCollateService.orderSwapDataCollate(dayBegin, dayEnd, stationCode);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "交易按日期整理")
|
||||
@PostMapping("/trade/collate")
|
||||
@ApiOperationSupport(order = 2)
|
||||
public Result<String> tradeDataCollate(String dayBegin, String dayEnd) {
|
||||
return homeDataManualCollateService.tradeDataCollate(dayBegin, dayEnd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package com.evotech.hd.cloud.entity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(name = "HomeData3中的数据")
|
||||
public class HomeStationOrderData {
|
||||
|
||||
private String stationCode;
|
||||
|
||||
private String stationName;
|
||||
|
||||
private Integer quantity;
|
||||
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
package com.evotech.hd.cloud.entity.vo;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
import com.evotech.hd.cloud.entity.HomeStationOrderData;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@ -9,18 +11,22 @@ import lombok.Data;
|
||||
@Schema(name = "订单")
|
||||
public class HomeData3 {
|
||||
|
||||
private String dayBegin;
|
||||
|
||||
private String dayEnd;
|
||||
|
||||
@Schema(description = "总订单数")
|
||||
private Integer totalOrder;
|
||||
private Integer quantity;
|
||||
|
||||
@Schema(description = "完成订单数")
|
||||
private Integer finishedOrder;
|
||||
private Integer finishedQuantity;
|
||||
|
||||
@Schema(description = "进行中的订单数")
|
||||
private Integer toDoOrder;
|
||||
private Integer toDoQuantity;
|
||||
|
||||
@Schema(description = "作废订单数")
|
||||
private Integer cancleOrder;
|
||||
private Integer cancleQuantity;
|
||||
|
||||
private Map<String, Long> stationRatio;
|
||||
private List<HomeStationOrderData> stationOrderDataList;
|
||||
|
||||
}
|
||||
|
||||
@ -7,11 +7,21 @@ import lombok.Data;
|
||||
@Schema(name = "交易")
|
||||
public class HomeData4 {
|
||||
|
||||
@Schema(description = "总交易数")
|
||||
private Integer totalTrade;
|
||||
private String dayBegin;
|
||||
|
||||
@Schema(description = "成功交易数")
|
||||
private Integer totalSuccessTrade;
|
||||
private String dayEnd;
|
||||
|
||||
@Schema(description = "交易数量")
|
||||
private Integer quantity;
|
||||
|
||||
@Schema(description = "充值交易数量")
|
||||
private Integer chargeTradeQuantity;
|
||||
|
||||
@Schema(description = "订单交易数量")
|
||||
private Integer orderTradeQuantity;
|
||||
|
||||
@Schema(description = "退款交易数量")
|
||||
private Integer refundTradeQuantity;
|
||||
|
||||
@Schema(description = "收入总钱数")
|
||||
private Integer totalMoney;
|
||||
|
||||
@ -11,7 +11,7 @@ public class HomeData5 {
|
||||
private String month;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer totalOrder;
|
||||
private Integer quantity;
|
||||
|
||||
@Schema(description = "金额")
|
||||
private Integer totalMoney;
|
||||
|
||||
@ -10,15 +10,21 @@ public class HomeData6 {
|
||||
@Schema(description = "年月")
|
||||
private String month;
|
||||
|
||||
@Schema(description = "总交易数")
|
||||
private Integer totalTrade;
|
||||
@Schema(description = "余额支付交易数")
|
||||
private Integer walletQuantity;
|
||||
|
||||
@Schema(description = "成功交易数")
|
||||
private Integer totalSuccessTrade;
|
||||
@Schema(description = "余额支付金额")
|
||||
private Integer walletMoney;
|
||||
|
||||
@Schema(description = "收入总钱数")
|
||||
private Integer totalMoney;
|
||||
@Schema(description = "收入金额")
|
||||
private Integer inMoney;
|
||||
|
||||
@Schema(description = "支出总钱数")
|
||||
private Integer totalRefund;
|
||||
@Schema(description = "收入交易数")
|
||||
private Integer inQuantity;
|
||||
|
||||
@Schema(description = "退款金额")
|
||||
private Integer refundMoney;
|
||||
|
||||
@Schema(description = "退款交易数")
|
||||
private Integer refundQuantity;
|
||||
}
|
||||
|
||||
@ -11,20 +11,26 @@ public class HomeData7 {
|
||||
private String month;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private Integer totalOrder;
|
||||
private Integer quantity;
|
||||
|
||||
@Schema(description = "同比订单数量")
|
||||
private Integer lastMonthTotalOrder;
|
||||
private Integer lastMonthQuantity;
|
||||
|
||||
@Schema(description = "环比订单数量")
|
||||
private Integer lastYearTotalOrder;
|
||||
private Integer lastYearQuantity;
|
||||
|
||||
@Schema(description = "交易数量")
|
||||
private Integer totalTrade;
|
||||
@Schema(description = "前年订单数量")
|
||||
private Integer last2YearQuantity;
|
||||
|
||||
@Schema(description = "同比交易数量")
|
||||
private Integer lastMonthTotalTrade;
|
||||
@Schema(description = "交易金额")
|
||||
private Integer tradeAmount;
|
||||
|
||||
@Schema(description = "环比交易数量")
|
||||
private Integer lastYearTotalTrade;
|
||||
@Schema(description = "同比交易金额")
|
||||
private Integer lastMonthTradeAmount;
|
||||
|
||||
@Schema(description = "环比交易金额")
|
||||
private Integer lastYearTradeAmount;
|
||||
|
||||
@Schema(description = "前年交易金额")
|
||||
private Integer last2YearTradeAmount;
|
||||
}
|
||||
|
||||
@ -16,10 +16,12 @@ import lombok.Data;
|
||||
@Schema(name = "Native下单参数")
|
||||
public class NativePayVO {
|
||||
|
||||
@Schema(description = "用户编码", requiredMode = RequiredMode.REQUIRED)
|
||||
@NotBlank
|
||||
@Schema(description = "用户编码")
|
||||
private String wuid;
|
||||
|
||||
@Schema(description = "公司编码")
|
||||
private String ccode;
|
||||
|
||||
@Schema(description = "订单总描述", requiredMode = RequiredMode.REQUIRED)
|
||||
@NotBlank
|
||||
private String description;
|
||||
|
||||
@ -21,7 +21,7 @@ import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Component
|
||||
//@Component
|
||||
@Order(value = 20)
|
||||
@Slf4j
|
||||
public class MqttConnectInit implements ApplicationRunner {
|
||||
|
||||
@ -8,8 +8,14 @@ import lombok.Data;
|
||||
@Data
|
||||
public class OrderStatusData {
|
||||
|
||||
@Schema(description = "总充电量")
|
||||
@Schema(description = "充电电池编码 - 状态5 数据")
|
||||
private String batCode;
|
||||
|
||||
@Schema(description = "总充电量 - 状态5 数据")
|
||||
private BigDecimal electAmount;
|
||||
|
||||
@Schema(description = "充电电池soc - 状态5 数据")
|
||||
private Integer soc;
|
||||
|
||||
@Schema(description = "租借电池包仓位")
|
||||
private Integer rentBatNo;
|
||||
|
||||
@ -144,8 +144,20 @@ public class MessageUtilService {
|
||||
*/
|
||||
public JSONObject getAESKey(String stationCode) {
|
||||
JSONObject jo = new JSONObject();
|
||||
Object o1 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key");
|
||||
Object o2 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv");
|
||||
Object o1 = null;
|
||||
try {
|
||||
o1 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key");
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
Object o2 = null;
|
||||
try {
|
||||
o2 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv");
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (!ObjectUtil.isEmpty(o1) && !ObjectUtil.isEmpty(o2)) {
|
||||
jo.set("aesSecretKey", o1.toString());
|
||||
jo.set("aesIv", o2.toString());
|
||||
|
||||
@ -27,7 +27,6 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderByPlateNumResp
|
||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderData;
|
||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||
import com.evotech.hd.cloud.utils.CommonUtil;
|
||||
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
@ -57,8 +56,6 @@ public class RequestMessageService {
|
||||
private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
|
||||
@Resource
|
||||
private OrderSwapBatteryService orderSwapBatteryService;
|
||||
@Resource
|
||||
private SwapOrderBasicFeeComponent orderBasicFeeComponent;
|
||||
|
||||
@Async("taskExecutor")
|
||||
public void request(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
|
||||
@ -130,8 +127,8 @@ public class RequestMessageService {
|
||||
osb.setStatus(1);
|
||||
osb.setStationCode(osbp.getStationCode());
|
||||
osb.setStationName(osbp.getStationName());
|
||||
// 加上费用标准
|
||||
osb = orderBasicFeeComponent.orderBasicFee(osb);
|
||||
// // 加上费用标准 - 移到订单服务中了
|
||||
// osb = orderBasicFeeComponent.orderBasicFee(osb);
|
||||
|
||||
orderSwapBatteryService.add(osb);
|
||||
}
|
||||
|
||||
@ -7,8 +7,10 @@ import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.evotech.hd.cloud.dao.BatteryStationDcDao;
|
||||
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
|
||||
import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao;
|
||||
import com.evotech.hd.cloud.dao.VehicleInfoDao;
|
||||
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
|
||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||
@ -18,19 +20,24 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep;
|
||||
import com.evotech.hd.cloud.service.BatteryStationDcService;
|
||||
import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryTrace;
|
||||
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.OrderSwapBatteryStep;
|
||||
import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
/**
|
||||
* state消息 处理
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class StateMessageService {
|
||||
|
||||
@Resource
|
||||
@ -45,6 +52,11 @@ public class StateMessageService {
|
||||
private BatteryStationDcService batteryStationDcService;
|
||||
@Resource
|
||||
private HDStepDictComponent hdStepDictComponent;
|
||||
@Resource
|
||||
private VehicleInfoDao vehicleInfoDao;
|
||||
@Resource
|
||||
private BatteryStationDcDao batteryStationDcDao;
|
||||
|
||||
|
||||
@Async("taskExecutor")
|
||||
public void state(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
|
||||
@ -95,6 +107,28 @@ public class StateMessageService {
|
||||
step.setCreater("SYS");
|
||||
step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
|
||||
orderSwapBatteryStepDao.insert(step);
|
||||
// 修改车上电池编码
|
||||
VehicleInfo vi = new VehicleInfo();
|
||||
vi.setBatCode(statusData.getRentBatCode());
|
||||
vi.setBatSoc(statusData.getRentBatSoc());
|
||||
vehicleInfoDao.update(vi, new QueryWrapper<VehicleInfo>().eq("plate_num", osb.getPlateNum()));
|
||||
// 修改2块电池的信息
|
||||
BatteryStationDc dc1 = new BatteryStationDc();
|
||||
BatteryStationDc dc2 = new BatteryStationDc();
|
||||
dc1.setStatus(1);
|
||||
dc1.setPointType(2);
|
||||
dc1.setPointCode(osb.getPlateNum());
|
||||
dc1.setPointName(osb.getPlateNum());
|
||||
dc1.setSoc(statusData.getRentBatSoc());
|
||||
dc1.setDccNo(0);
|
||||
batteryStationDcDao.update(dc1, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getRentBatCode()));
|
||||
dc2.setStatus(2);
|
||||
dc2.setPointType(1);
|
||||
dc2.setPointCode(osb.getStationCode());
|
||||
dc2.setPointName(osb.getStationName());
|
||||
dc2.setSoc(statusData.getReturnBatSoc());
|
||||
dc2.setDccNo(statusData.getReturnBatNo());
|
||||
batteryStationDcDao.update(dc2, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getReturnBatCode()));
|
||||
// 添加2块电池的溯源记录
|
||||
addBatteryTrace(orderStatus, statusData, osb);
|
||||
break;
|
||||
@ -105,6 +139,11 @@ public class StateMessageService {
|
||||
case 5:
|
||||
// 修改订单状态和数据
|
||||
alterOrderStatus(orderStatus, statusData);
|
||||
// 修改电池状态
|
||||
BatteryStationDc dc = new BatteryStationDc();
|
||||
dc.setStatus(3);
|
||||
dc.setSoc(statusData.getSoc());
|
||||
batteryStationDcDao.update(dc, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getBatCode()));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -119,7 +158,9 @@ public class StateMessageService {
|
||||
*/
|
||||
private void addBatteryTrace(OrderStatus orderStatus, OrderStatusData statusData, OrderSwapBattery osb) {
|
||||
BatteryTrace bt1 = new BatteryTrace();
|
||||
bt1.setOrderNo(orderStatus.getOrderNo());
|
||||
bt1.setBatCode(statusData.getRentBatCode());
|
||||
bt1.setSoc(statusData.getRentBatSoc());
|
||||
bt1.setBeginTime(orderStatus.getStatusTime());
|
||||
bt1.setPointType(2);
|
||||
bt1.setPointCode(osb.getPlateNum());
|
||||
@ -128,6 +169,7 @@ public class StateMessageService {
|
||||
BatteryTrace bt2 = new BatteryTrace();
|
||||
BeanUtils.copyProperties(bt1, bt2);
|
||||
bt2.setBatCode(statusData.getReturnBatCode());
|
||||
bt2.setSoc(statusData.getRentBatSoc());
|
||||
bt2.setPointType(1);
|
||||
bt2.setPointCode(osb.getStationCode());
|
||||
bt2.setPointName(osb.getStationName());
|
||||
@ -168,9 +210,21 @@ public class StateMessageService {
|
||||
private OrderSwapBattery alterOrderStatus(OrderStatus orderStatus, OrderStatusData statusData) {
|
||||
OrderSwapBattery osb = orderSwapBatteryDao.selectOne(new QueryWrapper<OrderSwapBattery>().eq("order_no", orderStatus.getOrderNo()));
|
||||
osb.setStatus(orderStatus.getStatus());
|
||||
if (orderStatus.getStatus() == 3 || orderStatus.getStatus() == 5) {
|
||||
if (orderStatus.getStatus() == 2) {
|
||||
osb.setServiceTimeBegin(orderStatus.getStatusTime());
|
||||
}
|
||||
if (orderStatus.getStatus() == 3) {
|
||||
osb.setServiceTimeEnd(orderStatus.getStatusTime());
|
||||
BeanUtils.copyProperties(statusData, osb);
|
||||
}
|
||||
if (orderStatus.getStatus() == 4) {
|
||||
osb.setChargeTimeBegin(orderStatus.getStatusTime());
|
||||
}
|
||||
if (orderStatus.getStatus() == 5) {
|
||||
osb.setChargeTimeEnd(orderStatus.getStatusTime());
|
||||
osb.setElectAmount(statusData.getElectAmount());
|
||||
}
|
||||
osb.setUptime(null);
|
||||
orderSwapBatteryDao.updateById(osb);
|
||||
return osb;
|
||||
}
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
package com.evotech.hd.cloud.service;
|
||||
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
|
||||
public interface HomeDataManualCollateService {
|
||||
|
||||
public Result<String> orderSwapDataCollate(String dayBegin, String dayEnd, String stationCode);
|
||||
|
||||
public Result<String> tradeDataCollate(String dayBegin, String dayEnd);
|
||||
|
||||
}
|
||||
@ -2,6 +2,7 @@ package com.evotech.hd.cloud.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
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;
|
||||
@ -24,6 +25,8 @@ public interface OrderSwapBatteryService {
|
||||
|
||||
public Result<List<OrderSwapBattery>> list(PageListSwapOrderRequest plsor);
|
||||
|
||||
public Result<List<OrderSwapBattery>> listByCompany(PageListSwapOrderRequest plsor);
|
||||
|
||||
public Result<List<OrderSwapBatteryStep>> listStep(String orderNo);
|
||||
|
||||
public Result<String> calculateCost(String orderNo);
|
||||
@ -31,5 +34,9 @@ public interface OrderSwapBatteryService {
|
||||
public Result<String> calculateCost(OrderSwapBattery osb);
|
||||
|
||||
public Result<String> walletPay(String orderNo, String wuid, String uname);
|
||||
|
||||
public Result<String> companyNativePay(NativePayVO prePay);
|
||||
|
||||
public Result<String> orderQuery(String outTradeNo);
|
||||
|
||||
}
|
||||
|
||||
@ -40,9 +40,9 @@ public class BatteryStationDcServiceImpl implements BatteryStationDcService {
|
||||
bt.setBatCode(bsdc.getBatCode());
|
||||
bt.setBeginTime(d);
|
||||
bt.setCreater("SYS");
|
||||
bt.setPointType(bsdc.getSourceFrom());
|
||||
bt.setPointCode(bt.getPointType() == 1? bsdc.getStationCode():bsdc.getSourceCode());
|
||||
bt.setPointName(bt.getPointType() == 1? bsdc.getStationName():bsdc.getSourceCode());
|
||||
bt.setPointType(bsdc.getPointType());
|
||||
bt.setPointCode(bsdc.getPointCode());
|
||||
bt.setPointName(bsdc.getPointName());
|
||||
addTrace(bt);
|
||||
return new Result<Integer>().success(n);
|
||||
}
|
||||
@ -76,7 +76,7 @@ public class BatteryStationDcServiceImpl implements BatteryStationDcService {
|
||||
page = batteryStationDcDao.selectPage(page, new QueryWrapper<BatteryStationDc>()
|
||||
.eq("del_flag", 0)
|
||||
.eq(StringUtils.hasText(plbsdcr.getProxyId()), "proxy_id", plbsdcr.getProxyId())
|
||||
.eq(StringUtils.hasText(plbsdcr.getStationCode()), "station_code", plbsdcr.getStationCode()));
|
||||
.eq(StringUtils.hasText(plbsdcr.getStationCode()), "point_code", plbsdcr.getStationCode()));
|
||||
if (page.getRecords().isEmpty()) {
|
||||
return new Result<List<BatteryStationDc>>().error(CodeMsg.DATABASE_RESULT_NULL);
|
||||
}
|
||||
|
||||
@ -25,7 +25,7 @@ public class BatteryStationHdFeeStandardDetailServiceImpl implements BatteryStat
|
||||
boolean b = batteryStationHdFeeStandardDetailDao.exists(new QueryWrapper<BatteryStationHdFeeStandardDetail>()
|
||||
.or(i -> i.and(j -> j.le("time_begin", bsfsd.getTimeBegin()).ge("time_end", bsfsd.getTimeBegin()))
|
||||
.or(j -> j.le("time_begin", bsfsd.getTimeEnd()).ge("time_end", bsfsd.getTimeEnd()))
|
||||
.or(j -> j.ge("day_begin", bsfsd.getTimeBegin()).le("day_end", bsfsd.getTimeEnd())))
|
||||
.or(j -> j.ge("time_begin", bsfsd.getTimeBegin()).le("time_end", bsfsd.getTimeEnd())))
|
||||
.eq("standard_id", bsfsd.getStandardId()));
|
||||
if (b) {
|
||||
return new Result<Integer>().error("换电站费用标准明细时间冲突!");
|
||||
|
||||
@ -0,0 +1,163 @@
|
||||
package com.evotech.hd.cloud.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.evotech.hd.cloud.dao.TradeDetailDao;
|
||||
import com.evotech.hd.cloud.service.HomeDataManualCollateService;
|
||||
import com.evotech.hd.common.core.dao.cloud.HomeDataOrderSwapCollateDao;
|
||||
import com.evotech.hd.common.core.dao.cloud.HomeDataTradeCollateDao;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.HomeDataOrderSwapCollate;
|
||||
import com.evotech.hd.common.core.entity.cloud.HomeDataTradeCollate;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class HomeDataManualCollateServiceImpl implements HomeDataManualCollateService {
|
||||
|
||||
@Resource
|
||||
private HomeDataOrderSwapCollateDao homeDataOrderSwapCollateDao;
|
||||
@Resource
|
||||
private OrderSwapBatteryDao orderSwapBatteryDao;
|
||||
@Resource
|
||||
private TradeDetailDao tradeDetailDao;
|
||||
@Resource
|
||||
private HomeDataTradeCollateDao homeDataTradeCollateDao;
|
||||
|
||||
@Override
|
||||
public Result<String> orderSwapDataCollate(String dayBegin, String dayEnd, String stationCode) {
|
||||
if (Integer.valueOf(dayEnd) < Integer.valueOf(dayBegin)) {
|
||||
return new Result<String>().error("日期填写错误");
|
||||
}
|
||||
// 天数
|
||||
List<String> dayStringList = new ArrayList<String>();
|
||||
dayStringList.add(dayBegin);
|
||||
Date begin = DateUtil.parse(dayBegin, DatePattern.PURE_DATE_PATTERN);
|
||||
long count = DateUtil.betweenDay(begin, DateUtil.parse(dayEnd, DatePattern.PURE_DATE_PATTERN), true);
|
||||
for (int i = 1; i <= count; i++) {
|
||||
dayStringList.add(DateUtil.format(DateUtil.offsetDay(begin, i), DatePattern.PURE_DATE_PATTERN));
|
||||
}
|
||||
// 循环处理
|
||||
for (int i = 0; i < dayStringList.size(); i++) {
|
||||
String dayString = dayStringList.get(i);
|
||||
Date day = DateUtil.parse(dayString, DatePattern.PURE_DATE_PATTERN);
|
||||
List<OrderSwapBattery> orderList = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
||||
.eq(StringUtils.hasText(stationCode), "station_code", stationCode)
|
||||
.eq("del_flag", 0)
|
||||
.ge("order_time", DateUtil.beginOfDay(day))
|
||||
.le("order_time", DateUtil.endOfDay(day)));
|
||||
if (orderList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
orderList = orderList.stream().map(item -> {
|
||||
if (item.getStatus() < 7) {
|
||||
item.setStatus(1);
|
||||
} else if (item.getStatus() == 7) {
|
||||
item.setStatus(2);
|
||||
} else if (item.getStatus() == 9) {
|
||||
item.setStatus(3);
|
||||
}
|
||||
return item;
|
||||
}).toList();
|
||||
|
||||
Map<String, Map<Integer, List<OrderSwapBattery>>> map = orderList.stream().collect(Collectors.groupingBy(OrderSwapBattery::getStationCode, Collectors.groupingBy(OrderSwapBattery::getStatus)));
|
||||
Date d = new Date();
|
||||
List<HomeDataOrderSwapCollate> orderSwapCollateList = new ArrayList<HomeDataOrderSwapCollate>();
|
||||
for (Map.Entry<String, Map<Integer, List<OrderSwapBattery>>> m : map.entrySet()) {
|
||||
String stationCodeKey = m.getKey();
|
||||
Map<Integer, List<OrderSwapBattery>> statusMap = m.getValue();
|
||||
for (Map.Entry<Integer, List<OrderSwapBattery>> entry : statusMap.entrySet()) {
|
||||
Integer status = entry.getKey();
|
||||
List<OrderSwapBattery> dayStatusOrderList = entry.getValue();
|
||||
HomeDataOrderSwapCollate orderSwapCollate = new HomeDataOrderSwapCollate();
|
||||
orderSwapCollate.setDay(dayString);
|
||||
orderSwapCollate.setCtime(d);
|
||||
orderSwapCollate.setQuantity(dayStatusOrderList.size());
|
||||
orderSwapCollate.setStationCode(stationCodeKey);
|
||||
orderSwapCollate.setStationName(dayStatusOrderList.get(0).getStationName());
|
||||
orderSwapCollate.setStatus(status);
|
||||
orderSwapCollateList.add(orderSwapCollate);
|
||||
}
|
||||
}
|
||||
|
||||
// 插入数据
|
||||
homeDataOrderSwapCollateDao.delete(new QueryWrapper<HomeDataOrderSwapCollate>().eq("day", dayString));
|
||||
homeDataOrderSwapCollateDao.insert(orderSwapCollateList);
|
||||
|
||||
log.info("\r\n===>>> {} 订单数据 {} 条,整理出记录 {} 条", dayString, orderList.size(), orderSwapCollateList.size());
|
||||
}
|
||||
|
||||
return new Result<String>().success("整理了 " + dayStringList.size() + " 天的订单数据");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> tradeDataCollate(String dayBegin, String dayEnd) {
|
||||
if (Integer.valueOf(dayEnd) < Integer.valueOf(dayBegin)) {
|
||||
return new Result<String>().error("日期填写错误");
|
||||
}
|
||||
// 天数
|
||||
List<String> dayStringList = new ArrayList<String>();
|
||||
dayStringList.add(dayBegin);
|
||||
Date begin = DateUtil.parse(dayBegin, DatePattern.PURE_DATE_PATTERN);
|
||||
long count = DateUtil.betweenDay(begin, DateUtil.parse(dayEnd, DatePattern.PURE_DATE_PATTERN), true);
|
||||
for (int i = 1; i <= count; i++) {
|
||||
dayStringList.add(DateUtil.format(DateUtil.offsetDay(begin, i), DatePattern.PURE_DATE_PATTERN));
|
||||
}
|
||||
// 循环处理
|
||||
for (int i = 0; i < dayStringList.size(); i++) {
|
||||
String dayString = dayStringList.get(i);
|
||||
Date day = DateUtil.parse(dayString, DatePattern.PURE_DATE_PATTERN);
|
||||
List<TradeDetail> tradeList = tradeDetailDao.selectList(new QueryWrapper<TradeDetail>()
|
||||
.eq("del_flag", 0)
|
||||
.ge("pay_time", DateUtil.beginOfDay(day))
|
||||
.le("pay_time", DateUtil.endOfDay(day)));
|
||||
if (tradeList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
Map<Integer, Map<Integer, List<TradeDetail>>> map = tradeList.stream().collect(Collectors.groupingBy(TradeDetail::getTradeType, Collectors.groupingBy(TradeDetail::getPayType)));
|
||||
Date d = new Date();
|
||||
List<HomeDataTradeCollate> tradeCollateList = new ArrayList<HomeDataTradeCollate>();
|
||||
for (Map.Entry<Integer, Map<Integer, List<TradeDetail>>> m : map.entrySet()) {
|
||||
Integer tradeType = m.getKey();
|
||||
Map<Integer, List<TradeDetail>> payTypeMap = m.getValue();
|
||||
for (Map.Entry<Integer, List<TradeDetail>> entry : payTypeMap.entrySet()) {
|
||||
Integer payType = entry.getKey();
|
||||
List<TradeDetail> dayPayTypeTradeList = entry.getValue();
|
||||
HomeDataTradeCollate tradeCollate = new HomeDataTradeCollate();
|
||||
tradeCollate.setDay(dayString);
|
||||
tradeCollate.setCtime(d);
|
||||
tradeCollate.setQuantity(dayPayTypeTradeList.size());
|
||||
tradeCollate.setTradeType(tradeType);
|
||||
tradeCollate.setPayType(payType);
|
||||
tradeCollate.setTradeAmount(dayPayTypeTradeList.stream().collect(Collectors.summingInt(item -> item.getTradeAmount())));
|
||||
tradeCollateList.add(tradeCollate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 插入数据
|
||||
homeDataTradeCollateDao.delete(new QueryWrapper<HomeDataTradeCollate>().eq("day", dayString));
|
||||
homeDataTradeCollateDao.insert(tradeCollateList);
|
||||
|
||||
log.info("\r\n===>>> {} 订单数据 {} 条,整理出记录 {} 条", dayString, tradeList.size(), tradeCollateList.size());
|
||||
}
|
||||
return new Result<String>().success("整理了 " + dayStringList.size() + " 天的订单数据");
|
||||
}
|
||||
|
||||
}
|
||||
@ -14,8 +14,8 @@ import com.evotech.hd.cloud.dao.BatteryStationDao;
|
||||
import com.evotech.hd.cloud.dao.BatteryStationDcDao;
|
||||
import com.evotech.hd.cloud.dao.BatteryStationRobotDao;
|
||||
import com.evotech.hd.cloud.dao.CompanyDao;
|
||||
import com.evotech.hd.cloud.dao.TradeDetailDao;
|
||||
import com.evotech.hd.cloud.dao.VehicleInfoDao;
|
||||
import com.evotech.hd.cloud.entity.HomeStationOrderData;
|
||||
import com.evotech.hd.cloud.entity.request.HomeDataRequest;
|
||||
import com.evotech.hd.cloud.entity.vo.HomeData1;
|
||||
import com.evotech.hd.cloud.entity.vo.HomeData2;
|
||||
@ -25,7 +25,8 @@ import com.evotech.hd.cloud.entity.vo.HomeData5;
|
||||
import com.evotech.hd.cloud.entity.vo.HomeData6;
|
||||
import com.evotech.hd.cloud.entity.vo.HomeData7;
|
||||
import com.evotech.hd.cloud.service.HomeService;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.dao.cloud.HomeDataOrderSwapCollateDao;
|
||||
import com.evotech.hd.common.core.dao.cloud.HomeDataTradeCollateDao;
|
||||
import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao;
|
||||
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
@ -33,14 +34,12 @@ import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot;
|
||||
import com.evotech.hd.common.core.entity.cloud.Company;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||
import com.evotech.hd.common.core.entity.cloud.HomeDataOrderSwapCollate;
|
||||
import com.evotech.hd.common.core.entity.cloud.HomeDataTradeCollate;
|
||||
import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
|
||||
import com.evotech.hd.common.core.entity.resource.ProxyOperater;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
||||
import com.evotech.hd.common.core.enums.OrderStatusEnums;
|
||||
import com.evotech.hd.common.core.enums.PayTypeEnums;
|
||||
import com.evotech.hd.common.core.enums.TradeResultEnums;
|
||||
import com.evotech.hd.common.core.enums.TradeTypeEnums;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
@ -65,10 +64,14 @@ public class HomeServiceImpl implements HomeService {
|
||||
private WechatUserDao wechatUserDao;
|
||||
@Resource
|
||||
private VehicleInfoDao vehicleInfoDao;
|
||||
// @Resource
|
||||
// private OrderSwapBatteryDao orderSwapBatteryDao;
|
||||
// @Resource
|
||||
// private TradeDetailDao tradeDetailDao;
|
||||
@Resource
|
||||
private OrderSwapBatteryDao orderSwapBatteryDao;
|
||||
private HomeDataOrderSwapCollateDao homeDataOrderSwapCollateDao;
|
||||
@Resource
|
||||
private TradeDetailDao tradeDetailDao;
|
||||
private HomeDataTradeCollateDao homeDataTradeCollateDao;
|
||||
|
||||
@Override
|
||||
public Result<HomeData1> homeData1(HomeDataRequest hd) {
|
||||
@ -127,26 +130,36 @@ public class HomeServiceImpl implements HomeService {
|
||||
return new Result<HomeData3>().error("时间范围未填写!");
|
||||
}
|
||||
HomeData3 data = new HomeData3();
|
||||
// 订单
|
||||
List<OrderSwapBattery> orderList = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
||||
.eq(StringUtils.hasText(hd.getStationCode()), "station_code", hd.getStationCode())
|
||||
.ge("order_time", hd.getTimeBegin())
|
||||
.le("order_time", hd.getTimeEnd()));
|
||||
data.setTotalOrder(orderList.size());
|
||||
data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN));
|
||||
data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN));
|
||||
List<HomeDataOrderSwapCollate> collateList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
.ge("day", data.getDayBegin())
|
||||
.le("day", data.getDayEnd()));
|
||||
Integer total = collateList.stream().collect(Collectors.summingInt(i -> i.getQuantity()));
|
||||
data.setQuantity(total);
|
||||
Integer todo = collateList.stream().filter(i -> i.getStatus() == 1).collect(Collectors.summingInt(i -> i.getQuantity()));
|
||||
data.setToDoQuantity(todo);
|
||||
Integer finish = collateList.stream().filter(i -> i.getStatus() == 2).collect(Collectors.summingInt(i -> i.getQuantity()));
|
||||
data.setFinishedQuantity(finish);
|
||||
Integer cancle = collateList.stream().filter(i -> i.getStatus() == 3).collect(Collectors.summingInt(i -> i.getQuantity()));
|
||||
data.setCancleQuantity(cancle);
|
||||
|
||||
long count1 = orderList.stream().filter(i -> i.getStatus() < 7).count();
|
||||
data.setToDoOrder((int)count1);
|
||||
long count2 = orderList.stream().filter(i -> i.getStatus() == 7).count();
|
||||
data.setFinishedOrder((int)count2);
|
||||
long count3 = orderList.stream().filter(i -> i.getStatus() == 9).count();
|
||||
data.setCancleOrder((int)count3);
|
||||
|
||||
Map<String, Long> map = orderList.parallelStream().map(i -> {
|
||||
i.setStationCode(i.getStationCode() + "---" + i.getStationName());
|
||||
return i;
|
||||
}).collect(Collectors.groupingBy(OrderSwapBattery::getStationCode, Collectors.counting()));
|
||||
data.setStationRatio(map);
|
||||
Map<String, Integer> map = collateList.stream()
|
||||
.collect(Collectors.groupingBy(HomeDataOrderSwapCollate::getStationCode,
|
||||
Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
List<BatteryStation> stationList = batteryStationDao.selectList(new QueryWrapper<BatteryStation>());
|
||||
List<HomeStationOrderData> stationOrderDataList = new ArrayList<HomeStationOrderData>();
|
||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||
HomeStationOrderData stationOrderData = new HomeStationOrderData();
|
||||
String stationCode = entry.getKey();
|
||||
String name = stationList.stream().filter(i -> stationCode.equals(i.getCode())).findFirst().get().getName();
|
||||
stationOrderData.setStationCode(stationCode);
|
||||
stationOrderData.setStationName(name);
|
||||
stationOrderData.setQuantity(entry.getValue());
|
||||
stationOrderDataList.add(stationOrderData);
|
||||
}
|
||||
|
||||
data.setStationOrderDataList(stationOrderDataList);;
|
||||
return new Result<HomeData3>().success(data);
|
||||
}
|
||||
|
||||
@ -156,19 +169,26 @@ public class HomeServiceImpl implements HomeService {
|
||||
return new Result<HomeData4>().error("时间范围未填写!");
|
||||
}
|
||||
HomeData4 data = new HomeData4();
|
||||
data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN));
|
||||
data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN));
|
||||
// 交易
|
||||
List<TradeDetail> tradeList = tradeDetailDao.selectList(new QueryWrapper<TradeDetail>()
|
||||
.ge("pay_time", hd.getTimeBegin())
|
||||
.le("pay_time", hd.getTimeEnd()));
|
||||
data.setTotalTrade(tradeList.size());
|
||||
tradeList = tradeList.stream().filter(i -> TradeResultEnums.SUCCESS.getName().equals(i.getPayResult())).toList();
|
||||
data.setTotalSuccessTrade(tradeList.size());
|
||||
List<HomeDataTradeCollate> collateList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", data.getDayBegin())
|
||||
.le("day", data.getDayEnd()));
|
||||
Integer quantity = collateList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getQuantity));
|
||||
data.setQuantity(quantity);
|
||||
Integer chargeTradeQuantity = collateList.stream().filter(i -> i.getTradeType() == 1).collect(Collectors.summingInt(HomeDataTradeCollate::getQuantity));
|
||||
data.setChargeTradeQuantity(chargeTradeQuantity);
|
||||
Integer orderTradeQuantity = collateList.stream().filter(i -> i.getTradeType() == 2).collect(Collectors.summingInt(HomeDataTradeCollate::getQuantity));
|
||||
data.setOrderTradeQuantity(orderTradeQuantity);
|
||||
Integer refundTradeQuantity = collateList.stream().filter(i -> i.getTradeType() == 3).collect(Collectors.summingInt(HomeDataTradeCollate::getQuantity));
|
||||
data.setRefundTradeQuantity(refundTradeQuantity);
|
||||
|
||||
int czSum = tradeList.stream().filter(i -> i.getTradeType() == 1).mapToInt(i -> i.getTradeAmount()).sum();
|
||||
int paySum = tradeList.stream().filter(i -> i.getTradeType() == 2 && i.getPayType() != 1).mapToInt(i -> i.getTradeAmount()).sum();
|
||||
data.setTotalMoney(czSum + paySum);
|
||||
Integer chargeAmount = collateList.stream().filter(i -> i.getTradeType() == 1).collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount));
|
||||
Integer orderAmount = collateList.stream().filter(i -> i.getTradeType() == 2 && i.getPayType() != 1).collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount));
|
||||
data.setTotalMoney(chargeAmount + orderAmount);
|
||||
|
||||
int refundSum = tradeList.stream().filter(i -> i.getTradeType() == 9).mapToInt(i -> i.getTradeAmount()).sum();
|
||||
int refundSum = collateList.stream().filter(i -> i.getTradeType() == 9).collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount));
|
||||
data.setTotalRefund(refundSum);
|
||||
|
||||
return new Result<HomeData4>().success(data);
|
||||
@ -185,27 +205,29 @@ public class HomeServiceImpl implements HomeService {
|
||||
monthArr[i] = DateUtil.format(DateUtil.offsetMonth(d, -i), DatePattern.SIMPLE_MONTH_FORMATTER);
|
||||
}
|
||||
|
||||
Date beginTime = DateUtil.beginOfMonth(DateUtil.offsetMonth(d, -6));
|
||||
List<OrderSwapBattery> orderList = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
||||
String beginDay = DateUtil.format(DateUtil.beginOfMonth(DateUtil.offsetMonth(d, -6)), DatePattern.PURE_DATE_FORMAT);
|
||||
List<HomeDataOrderSwapCollate> collateList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
.eq(StringUtils.hasText(hd.getStationCode()), "station_code", hd.getStationCode())
|
||||
.ge("order_time", beginTime));
|
||||
.ge("day", beginDay));
|
||||
|
||||
Map<String, Long> map1 = orderList.parallelStream().filter(i -> i.getDelFlag() == 0 && i.getStatus() <= 7)
|
||||
.collect(Collectors.groupingBy(i -> DateUtil.format(i.getOrderTime(), DatePattern.SIMPLE_MONTH_FORMATTER), Collectors.counting()));
|
||||
Map<String, Integer> map1 = collateList.stream()
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
|
||||
System.out.println(map1);
|
||||
|
||||
Map<String, Integer> map2 = orderList.parallelStream().filter(i -> i.getDelFlag() == 0 && i.getStatus() <= 7).filter(i -> i.getAmount() != null)
|
||||
.collect(Collectors.groupingBy(i -> DateUtil.format(i.getOrderTime(), DatePattern.SIMPLE_MONTH_FORMATTER),
|
||||
Collectors.reducing(0, OrderSwapBattery::getAmount, Integer::sum)
|
||||
));
|
||||
// 订单对应的钱,先不要了
|
||||
// Map<String, Integer> map2 = orderList.parallelStream().filter(i -> i.getDelFlag() == 0 && i.getStatus() <= 7).filter(i -> i.getAmount() != null)
|
||||
// .collect(Collectors.groupingBy(i -> DateUtil.format(i.getOrderTime(), DatePattern.SIMPLE_MONTH_FORMATTER),
|
||||
// Collectors.reducing(0, OrderSwapBattery::getAmount, Integer::sum)
|
||||
// ));
|
||||
|
||||
for (int i = 0; i < monthArr.length; i++) {
|
||||
HomeData5 data = new HomeData5();
|
||||
data.setMonth(monthArr[i]);
|
||||
data.setTotalOrder(map1.get(monthArr[i]) == null ? 0 : map1.get(monthArr[i]).intValue());
|
||||
data.setTotalMoney(map2.get(monthArr[i]) == null ? 0 : map2.get(monthArr[i]));
|
||||
data.setQuantity(map1.get(monthArr[i]) == null ? 0 : map1.get(monthArr[i]));
|
||||
list.add(data);
|
||||
}
|
||||
list = list.stream().sorted((i1, i2) -> i1.getMonth().compareTo(i2.getMonth())).toList();
|
||||
|
||||
return new Result<List<HomeData5>>().success(list);
|
||||
}
|
||||
@ -221,31 +243,41 @@ public class HomeServiceImpl implements HomeService {
|
||||
monthArr[i] = DateUtil.format(DateUtil.offsetMonth(d, -i), DatePattern.SIMPLE_MONTH_FORMATTER);
|
||||
}
|
||||
|
||||
Date beginTime = DateUtil.beginOfMonth(DateUtil.offsetMonth(d, -6));
|
||||
List<TradeDetail> tradeList = tradeDetailDao.selectList(new QueryWrapper<TradeDetail>()
|
||||
.eq("del_flag", 0)
|
||||
.ge("pay_time", beginTime));
|
||||
// 成功交易
|
||||
List<TradeDetail> successList = tradeList.stream().filter(i -> TradeResultEnums.SUCCESS.getName().equals(i.getPayResult())).toList();
|
||||
String beginDay = DateUtil.format(DateUtil.beginOfMonth(DateUtil.offsetMonth(d, -6)), DatePattern.PURE_DATE_FORMAT);
|
||||
List<HomeDataTradeCollate> collateList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", beginDay));
|
||||
// 余额支付
|
||||
Map<String, Integer> map0 = collateList.stream().filter(i -> i.getTradeType() == TradeTypeEnums.PAYORDER.getCode() && i.getPayType() == PayTypeEnums.WALLET.getCode())
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
Map<String, Integer> map01 = collateList.stream().filter(i -> i.getTradeType() == TradeTypeEnums.PAYORDER.getCode() && i.getPayType() == PayTypeEnums.WALLET.getCode())
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataTradeCollate::getQuantity)));
|
||||
|
||||
// 收入
|
||||
Map<Object, Integer> map1 = successList.parallelStream().filter(i -> i.getTradeType() == TradeTypeEnums.RECHARGE.getCode()
|
||||
||
|
||||
(i.getTradeType() == TradeTypeEnums.PAYORDER.getCode() && i.getPayType() != PayTypeEnums.WALLET.getCode())
|
||||
)
|
||||
.collect(Collectors.groupingBy(i -> DateUtil.format(i.getPayTime(), DatePattern.SIMPLE_MONTH_FORMATTER),
|
||||
Collectors.reducing(0, TradeDetail::getTradeAmount, Integer::sum)));
|
||||
Map<String, Integer> map1 = collateList.stream().filter(i -> i.getTradeType() == TradeTypeEnums.RECHARGE.getCode() ||
|
||||
(i.getTradeType() == TradeTypeEnums.PAYORDER.getCode() && i.getPayType() != PayTypeEnums.WALLET.getCode()))
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
Map<String, Integer> map11 = collateList.stream().filter(i -> i.getTradeType() == TradeTypeEnums.RECHARGE.getCode() ||
|
||||
(i.getTradeType() == TradeTypeEnums.PAYORDER.getCode() && i.getPayType() != PayTypeEnums.WALLET.getCode()))
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataTradeCollate::getQuantity)));
|
||||
// 退款
|
||||
Map<Object, Integer> map2 = successList.parallelStream().filter(i -> i.getTradeType() == TradeTypeEnums.REFUND.getCode())
|
||||
.collect(Collectors.groupingBy(i -> DateUtil.format(i.getPayTime(), DatePattern.SIMPLE_MONTH_FORMATTER),
|
||||
Collectors.reducing(0, TradeDetail::getTradeAmount, Integer::sum)));
|
||||
Map<String, Integer> map2 = collateList.stream().filter(i -> i.getTradeType() == TradeTypeEnums.REFUND.getCode())
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
Map<String, Integer> map21 = collateList.stream().filter(i -> i.getTradeType() == TradeTypeEnums.REFUND.getCode())
|
||||
.collect(Collectors.groupingBy(i -> i.getDay().substring(0, 6), Collectors.summingInt(HomeDataTradeCollate::getQuantity)));
|
||||
for (int i = 0; i < monthArr.length; i++) {
|
||||
HomeData6 data = new HomeData6();
|
||||
data.setMonth(monthArr[i]);
|
||||
data.setTotalMoney(map1.get(monthArr[i]) == null ? 0 : map1.get(monthArr[i]));
|
||||
data.setTotalRefund(map2.get(monthArr[i]) == null ? 0 : map2.get(monthArr[i]));
|
||||
data.setWalletMoney(map0.get(monthArr[i]) == null ? 0 : map0.get(monthArr[i]));
|
||||
data.setWalletQuantity(map01.get(monthArr[i]) == null ? 0 : map01.get(monthArr[i]));
|
||||
data.setInMoney(map1.get(monthArr[i]) == null ? 0 : map1.get(monthArr[i]));
|
||||
data.setInQuantity(map11.get(monthArr[i]) == null ? 0 : map11.get(monthArr[i]));
|
||||
data.setRefundMoney(map2.get(monthArr[i]) == null ? 0 : map2.get(monthArr[i]));
|
||||
data.setRefundQuantity(map21.get(monthArr[i]) == null ? 0 : map21.get(monthArr[i]));
|
||||
|
||||
list.add(data);
|
||||
}
|
||||
|
||||
list = list.stream().sorted((i1, i2) -> i1.getMonth().compareTo(i2.getMonth())).toList();
|
||||
return new Result<List<HomeData6>>().success(list);
|
||||
}
|
||||
|
||||
@ -257,42 +289,81 @@ public class HomeServiceImpl implements HomeService {
|
||||
if (type == 1) {
|
||||
Date beginOfMonth = DateUtil.beginOfMonth(d);
|
||||
Date lastBeginOfMonth = DateUtil.offsetMonth(beginOfMonth, -1);
|
||||
data.setMonth(DateUtil.format(lastBeginOfMonth, DatePattern.SIMPLE_MONTH_FORMATTER));
|
||||
Date last2BeginOfMonth = DateUtil.offsetMonth(lastBeginOfMonth, -1);
|
||||
String beginDayOfMonth = DateUtil.format(beginOfMonth, DatePattern.PURE_DATE_FORMATTER);
|
||||
String lastBeginDayOfMonth = DateUtil.format(lastBeginOfMonth, DatePattern.PURE_DATE_FORMATTER);
|
||||
String last2BeginDayOfMonth = DateUtil.format(last2BeginOfMonth, DatePattern.PURE_DATE_FORMATTER);
|
||||
data.setMonth(lastBeginDayOfMonth.substring(0, 6));
|
||||
// 订单
|
||||
Long monthCount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>()
|
||||
.ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("order_time", lastBeginOfMonth)
|
||||
.lt("order_time", beginOfMonth));
|
||||
Long lastMonthCount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>()
|
||||
.ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("order_time", last2BeginOfMonth)
|
||||
.lt("order_time", lastBeginOfMonth));
|
||||
Long lastYearCount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>()
|
||||
.ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("order_time", DateUtil.offsetYear(lastBeginOfMonth, -1))
|
||||
.lt("order_time", DateUtil.offsetYear(beginOfMonth, -1)));
|
||||
data.setTotalOrder(monthCount.intValue());
|
||||
data.setLastMonthTotalOrder(lastMonthCount.intValue());
|
||||
data.setLastYearTotalOrder(lastYearCount.intValue());
|
||||
List<HomeDataOrderSwapCollate> monthList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
// .ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("day", lastBeginDayOfMonth)
|
||||
.lt("day", beginDayOfMonth));
|
||||
data.setQuantity(monthList.isEmpty()?0:monthList.stream().collect(Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
List<HomeDataOrderSwapCollate> lastMonthList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
// .ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("day", last2BeginDayOfMonth)
|
||||
.lt("day", lastBeginDayOfMonth));
|
||||
data.setLastMonthQuantity(lastMonthList.isEmpty()?0:lastMonthList.stream().collect(Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
List<HomeDataOrderSwapCollate> lastYearList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
// .ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("day", DateUtil.format(DateUtil.offsetYear(lastBeginOfMonth, -1), DatePattern.PURE_DATE_FORMATTER))
|
||||
.lt("day", DateUtil.format(DateUtil.offsetYear(beginOfMonth, -1), DatePattern.PURE_DATE_FORMATTER)));
|
||||
data.setLastYearQuantity(lastYearList.isEmpty()?0:lastYearList.stream().collect(Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
// 交易
|
||||
List<HomeDataTradeCollate> tradeList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", lastBeginDayOfMonth)
|
||||
.lt("day", beginDayOfMonth));
|
||||
data.setTradeAmount(tradeList.isEmpty()?0:tradeList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
List<HomeDataTradeCollate> lastMonthTradeList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", last2BeginDayOfMonth)
|
||||
.lt("day", lastBeginDayOfMonth));
|
||||
data.setLastMonthTradeAmount(lastMonthTradeList.isEmpty()?0:lastMonthTradeList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
List<HomeDataTradeCollate> lastYearTradeList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", DateUtil.format(DateUtil.offsetYear(lastBeginOfMonth, -1), DatePattern.PURE_DATE_FORMATTER))
|
||||
.lt("day", DateUtil.format(DateUtil.offsetYear(beginOfMonth, -1), DatePattern.PURE_DATE_FORMATTER)));
|
||||
data.setLastYearTradeAmount(lastYearTradeList.isEmpty()?0:lastYearTradeList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
|
||||
return new Result<HomeData7>().success(data);
|
||||
}
|
||||
// 按年
|
||||
Date beginOfYear = DateUtil.beginOfYear(d);
|
||||
Date lastBeginOfYear = DateUtil.offsetYear(beginOfYear, -1);
|
||||
data.setMonth(DateUtil.year(lastBeginOfYear) + "");
|
||||
Date last2BeginOfYear = DateUtil.offsetYear(lastBeginOfYear, -1);
|
||||
Long yearCount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>()
|
||||
.ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("order_time", lastBeginOfYear)
|
||||
.lt("order_time", beginOfYear));
|
||||
Long lastYearCount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>()
|
||||
.ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("order_time", last2BeginOfYear)
|
||||
.lt("order_time", lastBeginOfYear));
|
||||
data.setTotalOrder(yearCount.intValue());
|
||||
data.setLastYearTotalOrder(lastYearCount.intValue());
|
||||
String beginDayOfYear = DateUtil.format(beginOfYear, DatePattern.PURE_DATE_FORMATTER);
|
||||
String lastBeginDayOfYear = DateUtil.format(lastBeginOfYear, DatePattern.PURE_DATE_FORMATTER);
|
||||
String last2BeginDayOfYear = DateUtil.format(last2BeginOfYear, DatePattern.PURE_DATE_FORMATTER);
|
||||
// 订单
|
||||
List<HomeDataOrderSwapCollate> yearList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
// .ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("day", beginDayOfYear)
|
||||
.lt("day", DateUtil.format(d, DatePattern.PURE_DATE_FORMATTER)));
|
||||
data.setQuantity(yearList.isEmpty()?0:yearList.stream().collect(Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
List<HomeDataOrderSwapCollate> lastYearList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
// .ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("day", lastBeginDayOfYear)
|
||||
.lt("day", beginDayOfYear));
|
||||
data.setLastYearQuantity(lastYearList.isEmpty()?0:lastYearList.stream().collect(Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
List<HomeDataOrderSwapCollate> last2YearList = homeDataOrderSwapCollateDao.selectList(new QueryWrapper<HomeDataOrderSwapCollate>()
|
||||
// .ne("status", OrderStatusEnums.CANCLE.getCode())
|
||||
.ge("day", last2BeginDayOfYear)
|
||||
.lt("day", lastBeginDayOfYear));
|
||||
data.setLast2YearQuantity(last2YearList.isEmpty()?0:last2YearList.stream().collect(Collectors.summingInt(HomeDataOrderSwapCollate::getQuantity)));
|
||||
|
||||
// 交易
|
||||
List<HomeDataTradeCollate> tradeList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", beginDayOfYear)
|
||||
.lt("day", DateUtil.format(d, DatePattern.PURE_DATE_FORMATTER)));
|
||||
data.setTradeAmount(tradeList.isEmpty()?0:tradeList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
List<HomeDataTradeCollate> lastYearTradeList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", lastBeginDayOfYear)
|
||||
.lt("day", beginDayOfYear));
|
||||
data.setLastYearTradeAmount(lastYearTradeList.isEmpty()?0:lastYearTradeList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
List<HomeDataTradeCollate> last2YearTradeList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
|
||||
.ge("day", last2BeginDayOfYear)
|
||||
.lt("day", lastBeginDayOfYear));
|
||||
data.setLast2YearTradeAmount(last2YearTradeList.isEmpty()?0:last2YearTradeList.stream().collect(Collectors.summingInt(HomeDataTradeCollate::getTradeAmount)));
|
||||
|
||||
return new Result<HomeData7>().success(data);
|
||||
}
|
||||
|
||||
|
||||
@ -17,10 +17,12 @@ import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
|
||||
import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao;
|
||||
import com.evotech.hd.cloud.dao.VehicleInfoDao;
|
||||
import com.evotech.hd.cloud.dao.WalletAccountDao;
|
||||
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||
import com.evotech.hd.cloud.service.TradeService;
|
||||
import com.evotech.hd.cloud.service.WalletAccountService;
|
||||
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
|
||||
import com.evotech.hd.cloud.service.rpc.WechatService;
|
||||
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
||||
@ -65,6 +67,9 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
private WalletAccountService walletAccountService;
|
||||
@Resource
|
||||
private TradeService tradeService;
|
||||
@Resource
|
||||
private WechatService wechatService;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
@ -132,6 +137,8 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
|
||||
@Override
|
||||
public Result<Integer> add(OrderSwapBattery osb) {
|
||||
// 加上费用标准
|
||||
osb = orderBasicFeeComponent.orderBasicFee(osb);
|
||||
osb.setCtime(new Date());
|
||||
int n = orderSwapBatteryDao.insert(osb);
|
||||
if (n == 1) {
|
||||
@ -167,7 +174,13 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
Page<OrderSwapBattery> page = new Page<OrderSwapBattery>(plsor.getPageNo(), plsor.getPageSize());
|
||||
|
||||
List<String> plateNumList = new ArrayList<String>();
|
||||
if (StringUtils.hasText(plsor.getPlateNums())) {
|
||||
if (StringUtils.hasText(plsor.getCcode())) {
|
||||
List<VehicleInfo> vehicleList = vehicleInfoDao.selectList(new QueryWrapper<VehicleInfo>().eq("ccode", plsor.getCcode()));
|
||||
if (vehicleList.isEmpty()) {
|
||||
return new Result<List<OrderSwapBattery>>().error("未发现该公司车辆");
|
||||
}
|
||||
plateNumList = vehicleList.stream().map(i -> i.getPlateNum()).toList();
|
||||
} else if (StringUtils.hasText(plsor.getPlateNums())) {
|
||||
plateNumList = Arrays.asList(plsor.getPlateNums().split(","));
|
||||
}
|
||||
List<Integer> statusList = new ArrayList<Integer>();
|
||||
@ -193,6 +206,33 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
}
|
||||
return new Result<List<OrderSwapBattery>>().success(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<List<OrderSwapBattery>> listByCompany(PageListSwapOrderRequest plsor) {
|
||||
if (!StringUtils.hasText(plsor.getCcode())) {
|
||||
return new Result<List<OrderSwapBattery>>().error("参数错误");
|
||||
}
|
||||
if (plsor.getOrderTimeBegin() == null || plsor.getOrderTimeEnd() == null) {
|
||||
return new Result<List<OrderSwapBattery>>().error("参数错误");
|
||||
}
|
||||
Page<OrderSwapBattery> page = new Page<OrderSwapBattery>(plsor.getPageNo(), plsor.getPageSize());
|
||||
List<VehicleInfo> vehicleList = vehicleInfoDao.selectList(new QueryWrapper<VehicleInfo>().eq("ccode", plsor.getCcode()));
|
||||
if (vehicleList.isEmpty()) {
|
||||
return new Result<List<OrderSwapBattery>>().error("未发现该公司车辆");
|
||||
}
|
||||
List<String> plateNumList = vehicleList.stream().map(i -> i.getPlateNum()).toList();
|
||||
page = orderSwapBatteryDao.selectPage(page, new QueryWrapper<OrderSwapBattery>()
|
||||
.in("plate_num", plateNumList)
|
||||
.in(StringUtils.hasText(plsor.getStatus()), "status", plsor.getStatus())
|
||||
.ge("order_time", plsor.getOrderTimeBegin())
|
||||
.le("order_time", plsor.getOrderTimeEnd())
|
||||
.ne("del_flag", 1)
|
||||
.orderByDesc("pk_id"));
|
||||
if (page.getRecords().isEmpty()) {
|
||||
return new Result<List<OrderSwapBattery>>().error(CodeMsg.DATABASE_RESULT_NULL);
|
||||
}
|
||||
return new Result<List<OrderSwapBattery>>().success(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<List<OrderSwapBatteryStep>> listStep(String orderNo) {
|
||||
@ -331,4 +371,14 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
return new Result<String>().success("OK");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> companyNativePay(NativePayVO prePay) {
|
||||
return wechatService.wechatNativePay(prePay);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> orderQuery(String outTradeNo) {
|
||||
return wechatService.orderQuery(2, outTradeNo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package com.evotech.hd.cloud.service.newthread;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -10,7 +9,9 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.evotech.hd.cloud.dao.WalletAccountDao;
|
||||
import com.evotech.hd.cloud.dao.WalletAccountDetailDao;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder;
|
||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||
import com.evotech.hd.common.core.entity.cloud.WalletAccount;
|
||||
import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail;
|
||||
@ -33,6 +34,8 @@ public class WechatPayNotifyHandleService {
|
||||
private GZHTemplateMessageService templateMessageService;
|
||||
@Resource
|
||||
private OrderSwapBatteryDao orderSwapBatteryDao;
|
||||
@Resource
|
||||
private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao;
|
||||
|
||||
|
||||
// @Async("taskExecutor")
|
||||
@ -68,6 +71,7 @@ public class WechatPayNotifyHandleService {
|
||||
wallet.setTotalAmount(wad.getAfterTotalAmount());
|
||||
wallet.setRechargeAmount(wad.getAfterRechargeAmount());
|
||||
wallet.setGiftAmount(wad.getAfterGiftAmount());
|
||||
wallet.setUptime(null);
|
||||
walletAccountDao.updateById(wallet);
|
||||
|
||||
// 发送公众号消息
|
||||
@ -114,7 +118,8 @@ public class WechatPayNotifyHandleService {
|
||||
* @param tradeDetail
|
||||
*/
|
||||
private void nativePayHandle(TradeDetail tradeDetail) {
|
||||
List<String> orderNoList = Arrays.asList(tradeDetail.getOrderNo().split(","));
|
||||
List<PreOrderRelationSwapOrder> list = preOrderRelationSwapOrderDao.selectList(new QueryWrapper<PreOrderRelationSwapOrder>().eq("out_trade_no", tradeDetail.getOutTradeNo()));
|
||||
List<String> orderNoList = list.stream().map(i -> i.getOrderNo()).toList();
|
||||
List<OrderSwapBattery> orderList = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
||||
.eq("status", 6).in("order_no", orderNoList));
|
||||
if (orderList.size() != orderNoList.size()) {
|
||||
@ -126,7 +131,6 @@ public class WechatPayNotifyHandleService {
|
||||
orderSwapBatteryDao.update(new UpdateWrapper<OrderSwapBattery>().in("pk_id", idList)
|
||||
.set("status", OrderStatusEnums.FINISH.getCode())
|
||||
.set("trade_no", tradeDetail.getOutTradeNo()));
|
||||
|
||||
// 发送公众号消息,发给企业绑定的微信号
|
||||
// templateMessageService.orderMessageSend(one, 3);
|
||||
}
|
||||
|
||||
@ -5,8 +5,10 @@ import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
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;
|
||||
@ -39,5 +41,13 @@ public interface WechatService {
|
||||
@PostMapping(value = "/wechat/gzh/msg/send/recharge",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<String> rechargeMessage(@ParameterObject TradeDetail trade, @RequestParam Integer money);
|
||||
|
||||
@PostMapping(value = "/wechat/wechatpay/native/prepay",
|
||||
consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public Result<String> wechatNativePay(@RequestBody NativePayVO prePay);
|
||||
|
||||
@GetMapping(value = "/wechat/wechatpay/native/order/query",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<String> orderQuery(@RequestParam Integer type, @RequestParam String outTradeNo);
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,47 @@
|
||||
package com.evotech.hd.cloud.task;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.evotech.hd.cloud.service.HomeDataManualCollateService;
|
||||
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class HomeDataOrderSwapTask {
|
||||
|
||||
@Resource
|
||||
private HomeDataManualCollateService homeDataManualCollateService;
|
||||
@Resource
|
||||
private OrderSwapBatteryDao orderSwapBatteryDao;
|
||||
|
||||
|
||||
@Scheduled(cron ="0 0 2 * * ?")
|
||||
public void orderSwapCollate() {
|
||||
log.info("\r\n===>>>开始整理订单数据");
|
||||
Date d = new Date();
|
||||
List<OrderSwapBattery> list = orderSwapBatteryDao.selectList(new QueryWrapper<OrderSwapBattery>()
|
||||
.or(i -> i.and(j -> j.ge("order_time", DateUtil.beginOfDay(d)).le("order_time", DateUtil.endOfDay(d)))
|
||||
.or(j -> j.ge("uptime", DateUtil.beginOfDay(d)).le("uptime", DateUtil.endOfDay(d)))));
|
||||
List<String> dayStringList = list.stream().map(i -> DateUtil.format(i.getOrderTime(), DatePattern.PURE_DATE_PATTERN)).distinct().toList();
|
||||
for (int i = 0; i < dayStringList.size(); i++) {
|
||||
String dayString = dayStringList.get(i);
|
||||
homeDataManualCollateService.orderSwapDataCollate(dayString, dayString, null);
|
||||
}
|
||||
|
||||
log.info("\r\n===>>>订单数据整理完成");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -16,7 +16,7 @@ import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Component
|
||||
//@Component
|
||||
@Slf4j
|
||||
public class OrderCostCalculateTask {
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ spring:
|
||||
username: nacos
|
||||
password: nacos
|
||||
discovery:
|
||||
register-enabled: true
|
||||
register-enabled: false
|
||||
#server-addr: 10.10.1.6:8848
|
||||
#ip: 10.10.1.2
|
||||
# 因添加了context-path,admin-server要想发现正确路径,需要加这个
|
||||
|
||||
@ -12,8 +12,11 @@
|
||||
<result column="source_from" property="sourceFrom" />
|
||||
<result column="source_code" property="sourceCode" />
|
||||
<result column="status" property="status" />
|
||||
<result column="station_code" property="stationCode" />
|
||||
<result column="point_type" property="pointType" />
|
||||
<result column="point_code" property="pointCode" />
|
||||
<result column="point_name" property="pointName" />
|
||||
<result column="soc" property="soc" />
|
||||
<result column="dcc_no" property="dccNo" />
|
||||
<result column="del_flag" property="delFlag" />
|
||||
<result column="ctime" property="ctime" />
|
||||
<result column="creater" property="creater" />
|
||||
@ -23,7 +26,7 @@
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
pk_id, type_code, bat_code, production_date, registration_date, source_from, source_code, status, soc, del_flag, ctime, creater, uptime, updater
|
||||
pk_id, type_code, bat_code, production_date, registration_date, source_from, source_code, status, point_type, point_code, point_name, soc, dcc_no, del_flag, ctime, creater, uptime, updater
|
||||
</sql>
|
||||
|
||||
<select id="getDcByStationCode" resultMap="BaseResultMap">
|
||||
@ -32,7 +35,7 @@
|
||||
FROM
|
||||
yt_t_battery_station_dc
|
||||
WHERE
|
||||
station_code = #{stationCode}
|
||||
point_code = #{stationCode}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,28 @@
|
||||
package com.evotech.hd.cloud;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.evotech.hd.cloud.dao.BatteryStationDcDao;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@SpringBootTest
|
||||
public class ApplicationTest {
|
||||
|
||||
@Resource
|
||||
private BatteryStationDcDao batteryStationDcDao;
|
||||
|
||||
@Test
|
||||
void dcTest() {
|
||||
// 修改电池状态
|
||||
BatteryStationDc dc = new BatteryStationDc();
|
||||
dc.setStatus(3);
|
||||
dc.setSoc(100);
|
||||
batteryStationDcDao.update(dc, new QueryWrapper<BatteryStationDc>().eq("bat_code", "YTDCCB1A2025021789U21YN6WO68KM"));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,6 +1,9 @@
|
||||
package com.evotech.hd.gateway.utils;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.core.io.buffer.DataBufferUtils;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@ -11,8 +14,6 @@ import com.evotech.hd.common.core.entity.Result;
|
||||
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
|
||||
public class ResponseUtils {
|
||||
|
||||
|
||||
2
pom.xml
2
pom.xml
@ -36,7 +36,7 @@
|
||||
<redission.version>3.35.0</redission.version>
|
||||
<spring-boot-admin.version>3.3.4</spring-boot-admin.version>
|
||||
<!-- Commons component Settings -->
|
||||
<hutool.version>5.8.32</hutool.version>
|
||||
<hutool.version>5.8.35</hutool.version>
|
||||
<sentinel.version>1.8.8</sentinel.version>
|
||||
<seata.version>2.0.0</seata.version>
|
||||
<!--<fastjson.version>2.0.9</fastjson.version>-->
|
||||
|
||||
@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.resource.entity.BatteryType;
|
||||
import com.evotech.hd.common.core.entity.resource.BatteryType;
|
||||
import com.evotech.hd.resource.service.BatteryTypeService;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||
|
||||
@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.resource.entity.CarType;
|
||||
import com.evotech.hd.common.core.entity.resource.CarType;
|
||||
import com.evotech.hd.resource.service.CarTypeService;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||
|
||||
@ -4,7 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.resource.entity.BatteryType;
|
||||
import com.evotech.hd.common.core.entity.resource.BatteryType;
|
||||
|
||||
public interface BatteryTypeService {
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.resource.entity.CarType;
|
||||
import com.evotech.hd.common.core.entity.resource.CarType;
|
||||
|
||||
public interface CarTypeService {
|
||||
|
||||
|
||||
@ -7,11 +7,11 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.evotech.hd.common.core.dao.resource.BatteryTypeDao;
|
||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.resource.BatteryType;
|
||||
import com.evotech.hd.common.core.enums.CodeMsg;
|
||||
import com.evotech.hd.resource.dao.BatteryTypeDao;
|
||||
import com.evotech.hd.resource.entity.BatteryType;
|
||||
import com.evotech.hd.resource.service.BatteryTypeService;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@ -7,11 +7,11 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.evotech.hd.common.core.dao.resource.CarTypeDao;
|
||||
import com.evotech.hd.common.core.entity.BasePageRequest;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.resource.CarType;
|
||||
import com.evotech.hd.common.core.enums.CodeMsg;
|
||||
import com.evotech.hd.resource.dao.CarTypeDao;
|
||||
import com.evotech.hd.resource.entity.CarType;
|
||||
import com.evotech.hd.resource.service.CarTypeService;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@ -72,6 +72,17 @@
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-json</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-extra</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.zxing</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
<version>3.5.3</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -18,10 +18,12 @@ import lombok.Data;
|
||||
@Schema(name = "Native下单参数")
|
||||
public class NativePayVO {
|
||||
|
||||
@Schema(description = "用户编码", requiredMode = RequiredMode.REQUIRED)
|
||||
@NotBlank
|
||||
@Schema(description = "用户编码")
|
||||
private String wuid;
|
||||
|
||||
@Schema(description = "公司编码")
|
||||
private String ccode;
|
||||
|
||||
@Schema(description = "订单总描述", requiredMode = RequiredMode.REQUIRED)
|
||||
@NotBlank
|
||||
private String description;
|
||||
|
||||
@ -22,6 +22,9 @@ public class PrePayVO {
|
||||
@NotBlank
|
||||
private String wuid;
|
||||
|
||||
@Schema(description = "公司编码")
|
||||
private String ccode;
|
||||
|
||||
@Schema(description = "订单总描述", requiredMode = RequiredMode.REQUIRED)
|
||||
@NotBlank
|
||||
private String description;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.evotech.hd.wechat.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@ -9,11 +10,11 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao;
|
||||
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatPayPreOrder;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
||||
import com.evotech.hd.common.core.utils.XCXUtil;
|
||||
import com.evotech.hd.wechat.config.XcxProperties;
|
||||
import com.evotech.hd.wechat.entity.NativePayVO;
|
||||
@ -36,6 +37,8 @@ import com.wechat.pay.java.service.payments.nativepay.model.SceneInfo;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||
import cn.hutool.extra.qrcode.QrConfig;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -54,14 +57,35 @@ public class WechatNativePayServiceImpl implements WechatNativePayService {
|
||||
private WechatUserDao wechatUserDao;
|
||||
@Resource
|
||||
private WechatPayComponent wechatPayComponent;
|
||||
@Resource
|
||||
private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao;
|
||||
|
||||
@Override
|
||||
public Result<String> nativePrepay(NativePayVO prePay) {
|
||||
// 校验用户
|
||||
WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper<WechatUser>().eq("wuid", prePay.getWuid()));
|
||||
if (wuser == null || !StringUtils.hasText(wuser.getOpenid())) {
|
||||
return new Result<String>().error("用户信息错误");
|
||||
// WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper<WechatUser>().eq("wuid", prePay.getWuid()));
|
||||
// if (wuser == null || !StringUtils.hasText(wuser.getOpenid())) {
|
||||
// return new Result<String>().error("用户信息错误");
|
||||
// }
|
||||
// 处理附加数据
|
||||
String outTradeNo = XCXUtil.payOutTradeNo(22);
|
||||
JSONObject jo = JSONUtil.parseObj(prePay.getAttach());
|
||||
String[] orderNoArr = jo.getStr("orderNo").split(",");
|
||||
List<PreOrderRelationSwapOrder> list = new ArrayList<PreOrderRelationSwapOrder>();
|
||||
for (int i = 0; i < orderNoArr.length; i++) {
|
||||
PreOrderRelationSwapOrder relationOrder = new PreOrderRelationSwapOrder();
|
||||
relationOrder.setOrderNo(orderNoArr[i]);
|
||||
relationOrder.setCtime(new Date());
|
||||
relationOrder.setDescription(prePay.getDescription());
|
||||
relationOrder.setOutTradeNo(outTradeNo);
|
||||
list.add(relationOrder);
|
||||
}
|
||||
preOrderRelationSwapOrderDao.insert(list);
|
||||
|
||||
jo.remove("orderNo");
|
||||
prePay.setAttach(jo.toJSONString(0));
|
||||
|
||||
|
||||
WechatPayPreOrder preOrder = new WechatPayPreOrder();
|
||||
// 组装数据
|
||||
PrepayRequest request = new PrepayRequest();
|
||||
@ -74,7 +98,7 @@ public class WechatNativePayServiceImpl implements WechatNativePayService {
|
||||
request.setMchid(xcxProperties.getMchid());
|
||||
request.setDescription(prePay.getDescription());
|
||||
request.setNotifyUrl(xcxProperties.getNativeNotifyUrl());
|
||||
request.setOutTradeNo(XCXUtil.payOutTradeNo(prePay.getStationCode()));
|
||||
request.setOutTradeNo(outTradeNo);
|
||||
// 金额
|
||||
Amount amount = new Amount();
|
||||
// amount.setTotal(prePay.getMoney());
|
||||
@ -107,9 +131,17 @@ public class WechatNativePayServiceImpl implements WechatNativePayService {
|
||||
// System.out.println("\r\n=====response>>>>>" + response);
|
||||
// 写表
|
||||
BeanUtils.copyProperties(request, preOrder);
|
||||
wechatPayComponent.wechatPrePayLog(prePay.getWuid(), prePay.getCostPrice(), preOrder, JSONUtil.toJsonStr(response));
|
||||
wechatPayComponent.wechatPrePayLog(prePay.getWuid(), prePay.getCcode(), prePay.getCostPrice(), preOrder, JSONUtil.toJsonStr(response));
|
||||
|
||||
return new Result<String>().success(response);
|
||||
JSONObject jo1 = JSONUtil.createObj();
|
||||
QrConfig config = new QrConfig(600, 600);
|
||||
// 设置边距,即二维码和背景之间的边距
|
||||
config.setMargin(2);
|
||||
String qrAsBase64String = QrCodeUtil.generateAsBase64(response.getCodeUrl(), config, "png");
|
||||
jo1.set("codeUrl", qrAsBase64String);
|
||||
jo1.set("OutTradeNo", outTradeNo);
|
||||
|
||||
return new Result<String>().success(jo1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ public class WechatPayServiceImpl implements WechatPayService {
|
||||
request.setMchid(xcxProperties.getMchid());
|
||||
request.setDescription(prePay.getDescription());
|
||||
request.setNotifyUrl(xcxProperties.getNotifyUrl());
|
||||
request.setOutTradeNo(XCXUtil.payOutTradeNo(prePay.getStationCode()));
|
||||
request.setOutTradeNo(XCXUtil.payOutTradeNo(21));
|
||||
// 金额
|
||||
Amount amount = new Amount();
|
||||
// amount.setTotal(prePay.getMoney());
|
||||
@ -127,7 +127,7 @@ public class WechatPayServiceImpl implements WechatPayService {
|
||||
// System.out.println("\r\n=====response>>>>>" + response);
|
||||
// 写表
|
||||
BeanUtils.copyProperties(request, preOrder);
|
||||
wechatPayComponent.wechatPrePayLog(prePay.getWuid(), prePay.getCostPrice(), preOrder, JSONUtil.toJsonStr(response));
|
||||
wechatPayComponent.wechatPrePayLog(prePay.getWuid(), prePay.getCcode(), prePay.getCostPrice(), preOrder, JSONUtil.toJsonStr(response));
|
||||
|
||||
return new Result<String>().success(response);
|
||||
}
|
||||
|
||||
@ -39,11 +39,12 @@ public class WechatPayComponent {
|
||||
* @param preOrder
|
||||
* @param jsonStrResponse
|
||||
*/
|
||||
public void wechatPrePayLog(String wuid, Integer costPrice, WechatPayPreOrder preOrder,
|
||||
public void wechatPrePayLog(String wuid, String ccode, Integer costPrice, WechatPayPreOrder preOrder,
|
||||
String jsonStrResponse) {
|
||||
preOrder.setPrePayResponse(jsonStrResponse);
|
||||
preOrder.setType(Transaction.TradeTypeEnum.NATIVE.name());
|
||||
preOrder.setWuid(wuid);
|
||||
preOrder.setCcode(ccode);
|
||||
preOrder.setCostPrice(costPrice);
|
||||
preOrder.setCtime(new Date());
|
||||
preOrderDao.insert(preOrder);
|
||||
@ -73,7 +74,7 @@ public class WechatPayComponent {
|
||||
tradeDetail.setTraderCode(payAttach.getTraderCode());
|
||||
tradeDetail.setWallet(payAttach.getWalletCode());
|
||||
tradeDetail.setDescription(payAttach.getDescription());
|
||||
if (payAttach.getType() == TradeTypeEnums.PAYORDER.getCode()) {
|
||||
if (payAttach.getType() == TradeTypeEnums.PAYORDER.getCode() && Transaction.TradeTypeEnum.JSAPI.equals(transaction.getTradeType())) {
|
||||
tradeDetail.setOrderNo(payAttach.getOrderNo());
|
||||
tradeDetail.setOrderCount(payAttach.getOrderNo().split(",").length);
|
||||
}
|
||||
@ -91,7 +92,7 @@ public class WechatPayComponent {
|
||||
|
||||
tradeDetail.setPayResult(transaction.getTradeState().name());
|
||||
tradeDetail.setPayMsg(transaction.getTradeStateDesc());
|
||||
tradeDetail.setPayTime(DateUtil.parseUTC(transaction.getSuccessTime()));
|
||||
tradeDetail.setPayTime(DateUtil.parseISO8601(transaction.getSuccessTime()));
|
||||
|
||||
// 2. 处理订单,看要不要异步
|
||||
cloudService.wechatPayNotifyHandle(tradeDetail);
|
||||
|
||||
@ -1,10 +1,17 @@
|
||||
package com.evotech.hd.wechat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
||||
import com.evotech.hd.common.core.utils.XCXUtil;
|
||||
import com.evotech.hd.wechat.config.XcxProperties;
|
||||
import com.evotech.hd.wechat.service.AccessTokenService;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@SpringBootTest
|
||||
@ -12,12 +19,34 @@ class WechatServerApplicationTests {
|
||||
|
||||
@Resource
|
||||
private AccessTokenService accessTokenService;
|
||||
@Resource
|
||||
private XcxProperties xcxProperties;
|
||||
@Resource
|
||||
private WechatUserDao wechatUserDao;
|
||||
|
||||
|
||||
// @Test
|
||||
// void contextLoads() {
|
||||
// String res = accessTokenService.getAccessToken();
|
||||
// System.out.println(res);
|
||||
// }
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
String res = accessTokenService.getAccessToken();
|
||||
System.out.println(res);
|
||||
void addUsers() {
|
||||
for (int i = 0; i < 4000; i++) {
|
||||
WechatUser user = new WechatUser();
|
||||
user.setOpenid("HD" + RandomUtil.randomString(28));
|
||||
user.setAppid(xcxProperties.getAppid());
|
||||
user.setWuid(XCXUtil.wechatUid(xcxProperties.getAppid(), user.getOpenid()));
|
||||
user.setUnionid("hbyt-" + RandomUtil.randomString(22));
|
||||
user.setPhoneNumber("18888" + String.format("%06d", i));
|
||||
user.setNickName("昵称" + i);
|
||||
user.setName("测试名称" + i);
|
||||
user.setGender(RandomUtil.randomInt(1, 3));
|
||||
user.setCtime(new Date());
|
||||
wechatUserDao.insert(user);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user