From 2dc1fed2e8ee747123c1c901d365ccd803e69484 Mon Sep 17 00:00:00 2001 From: dzl <863620989@qq.com> Date: Thu, 22 May 2025 15:58:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=95=85=E9=9A=9C=E4=B8=8A=E6=8A=A5=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EbikeUserFaultreportController.java | 35 +++++++--- .../model/dto/req/UserOrderFaultQueryDto.java | 28 ++++++++ .../model/dto/res}/OrderFaultReport.java | 15 +++-- .../model/entity/EbikeUserFaultreport.java | 6 ++ .../service/EbikeUserFaultreportService.java | 10 +++ .../impl/EbikeUserFaultreportServiceImpl.java | 67 +++++++++++++++---- 6 files changed, 134 insertions(+), 27 deletions(-) create mode 100644 ebike-orders/src/main/java/com/cdzy/orders/model/dto/req/UserOrderFaultQueryDto.java rename {ebike-payment/src/main/java/com/cdzy/payment/model/dto => ebike-orders/src/main/java/com/cdzy/orders/model/dto/res}/OrderFaultReport.java (66%) diff --git a/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserFaultreportController.java b/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserFaultreportController.java index 915775f4..b8898731 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserFaultreportController.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserFaultreportController.java @@ -4,8 +4,11 @@ import com.cdzy.common.model.JsonResult; import com.cdzy.common.model.EbikeUserFaultreportDto; import com.cdzy.common.model.EbikeUserFaultreportQueryDto; import com.cdzy.common.model.EbikeOrderAttachmentFileDto; +import com.cdzy.orders.model.dto.req.UserOrderFaultQueryDto; +import com.cdzy.orders.model.dto.res.OrderFaultReport; import com.cdzy.orders.service.EbikeOrderAttachmentFileService; import com.cdzy.orders.uitls.MinioUtil; +import com.mybatisflex.core.paginate.Page; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Autowired; @@ -53,7 +56,7 @@ public class EbikeUserFaultreportController { @PostMapping("remove") public JsonResult remove(@RequestParam(name = "id") String id) { boolean r = ebikeUserFaultreportService.deleteById(id); - return r? JsonResult.success() : JsonResult.failed("删除用户上报故障信息失败"); + return r ? JsonResult.success() : JsonResult.failed("删除用户上报故障信息失败"); } /** @@ -65,7 +68,7 @@ public class EbikeUserFaultreportController { @PostMapping("update") public JsonResult update(@RequestBody EbikeUserFaultreport ebikeUserFaultreport) { boolean r = ebikeUserFaultreportService.updateById(ebikeUserFaultreport); - return r? JsonResult.success() : JsonResult.failed("更新用户上报故障信息失败"); + return r ? JsonResult.success() : JsonResult.failed("更新用户上报故障信息失败"); } /** @@ -83,7 +86,7 @@ public class EbikeUserFaultreportController { return ebikeUserFaultreport; }).toList(); boolean r = ebikeUserFaultreportService.updateBatch(ebikeUserFaultreportList); - return r? JsonResult.success() : JsonResult.failed("批量更新用户上报故障信息失败"); + return r ? JsonResult.success() : JsonResult.failed("批量更新用户上报故障信息失败"); } /** @@ -102,11 +105,11 @@ public class EbikeUserFaultreportController { BeanUtils.copyProperties(entity, dto); // 获取附件信息 List attachmentFiles = ebikeOrderAttachmentFileService.getFilesByBusiId(id) - .stream().map(attachmentFile ->{ - EbikeOrderAttachmentFileDto attachmentFileDto = new EbikeOrderAttachmentFileDto(); - BeanUtils.copyProperties(attachmentFile, attachmentFileDto); + .stream().map(attachmentFile -> { + EbikeOrderAttachmentFileDto attachmentFileDto = new EbikeOrderAttachmentFileDto(); + BeanUtils.copyProperties(attachmentFile, attachmentFileDto); attachmentFileDto.setUrl(minioUtil.getBucketFileUrl(attachmentFile.getFileKey())); - return attachmentFileDto; + return attachmentFileDto; }).toList(); dto.setAttachmentFiles(attachmentFiles); return JsonResult.success(dto); @@ -126,6 +129,7 @@ public class EbikeUserFaultreportController { } return JsonResult.success(list); } + /** * 根据用户上报故障信息userId获取列表信息。 * @@ -133,9 +137,24 @@ public class EbikeUserFaultreportController { * @return 用户上报故障信息userId获取列表信息 */ @PostMapping("getFaultListByWeChatUser") - public JsonResult getFaultListByWeChatUser(@RequestBody Map params) { + public JsonResult getFaultListByWeChatUser(@RequestBody Map params) { List faultListByWeChatUser = ebikeUserFaultreportService.getFaultListByWeChatUser(params); return JsonResult.success(faultListByWeChatUser); } + /** + * 获取用户订单故障上报记录列表。 + * + * @param userOrderFaultQueryDto + * @return + */ + @PostMapping("getUserOrderFaultRecord") + public JsonResult getUserOrderFaultRecord(@RequestBody UserOrderFaultQueryDto userOrderFaultQueryDto) { + try { + Page orderFaultReports = ebikeUserFaultreportService.getUserOrderFaultRecord(userOrderFaultQueryDto); + return JsonResult.success(orderFaultReports); + } catch (Exception e) { + return JsonResult.failed("getUserOrderFaultRecord===>出错了"); + } + } } diff --git a/ebike-orders/src/main/java/com/cdzy/orders/model/dto/req/UserOrderFaultQueryDto.java b/ebike-orders/src/main/java/com/cdzy/orders/model/dto/req/UserOrderFaultQueryDto.java new file mode 100644 index 00000000..ca384b57 --- /dev/null +++ b/ebike-orders/src/main/java/com/cdzy/orders/model/dto/req/UserOrderFaultQueryDto.java @@ -0,0 +1,28 @@ +package com.cdzy.orders.model.dto.req; + +import com.cdzy.common.model.PageParam; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author:Ding + * @ClassName:UserOrderFaultQueryDto + * @Package:com.cdzy.orders.model.dto.req.UserOrderFaultQueryDto + * @Description:用户订单故障上报查询参数 + * @CreateDate:2025年05月22日 + * @Version:V1.0 + **/ +@Data +public class UserOrderFaultQueryDto { + + /** + * 订单编号 + */ + private String orderId; + + /** + * 分页参数 + */ + @NotNull(message = "分页参数不能为空") + private PageParam pageParam; +} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/OrderFaultReport.java b/ebike-orders/src/main/java/com/cdzy/orders/model/dto/res/OrderFaultReport.java similarity index 66% rename from ebike-payment/src/main/java/com/cdzy/payment/model/dto/OrderFaultReport.java rename to ebike-orders/src/main/java/com/cdzy/orders/model/dto/res/OrderFaultReport.java index 2bab7d7f..67f9b2f7 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/OrderFaultReport.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/model/dto/res/OrderFaultReport.java @@ -1,8 +1,9 @@ -package com.cdzy.payment.model.dto; +package com.cdzy.orders.model.dto.res; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; /** * @author:Ding @@ -15,10 +16,12 @@ import java.time.LocalDateTime; @Data public class OrderFaultReport { + private String faultReportId; + /** * 反馈用户 */ - private String userName; + private String reportUser; /** * 坐标 @@ -28,20 +31,20 @@ public class OrderFaultReport { /** * 故障类型 */ - private String faultType; + private String faultPart; /** * 图片 */ - private String image; + private List image; /** * 备注 */ - private String remark; + private String faultDescription; /** * 创建时间 */ - private LocalDateTime createTime; + private LocalDateTime reportAt; } diff --git a/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeUserFaultreport.java b/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeUserFaultreport.java index c8a4aab8..47250aed 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeUserFaultreport.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeUserFaultreport.java @@ -3,6 +3,7 @@ package com.cdzy.orders.model.entity; import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Table; + import java.io.Serializable; import java.time.LocalDateTime; @@ -107,4 +108,9 @@ public class EbikeUserFaultreport implements Serializable { */ private String workorderId; + /** + * 订单编号 + */ + private String orderCode; + } diff --git a/ebike-orders/src/main/java/com/cdzy/orders/service/EbikeUserFaultreportService.java b/ebike-orders/src/main/java/com/cdzy/orders/service/EbikeUserFaultreportService.java index 1f78c032..b710ee63 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/service/EbikeUserFaultreportService.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/service/EbikeUserFaultreportService.java @@ -2,6 +2,9 @@ package com.cdzy.orders.service; import com.cdzy.common.model.EbikeUserFaultreportQueryDto; import com.cdzy.common.model.EbikeUserFaultreportDto; +import com.cdzy.orders.model.dto.req.UserOrderFaultQueryDto; +import com.cdzy.orders.model.dto.res.OrderFaultReport; +import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; import com.cdzy.orders.model.entity.EbikeUserFaultreport; @@ -46,4 +49,11 @@ public interface EbikeUserFaultreportService extends IService getFaultListByWeChatUser( Map params); + + /** + * + * @param userOrderFaultQueryDto + * @return + */ + Page getUserOrderFaultRecord(UserOrderFaultQueryDto userOrderFaultQueryDto); } diff --git a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/EbikeUserFaultreportServiceImpl.java b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/EbikeUserFaultreportServiceImpl.java index 96de128d..fa5d326b 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/EbikeUserFaultreportServiceImpl.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/EbikeUserFaultreportServiceImpl.java @@ -4,12 +4,17 @@ import cn.hutool.core.map.MapUtil; import com.cdzy.common.model.EbikeOrderAttachmentFileDto; import com.cdzy.common.model.EbikeUserFaultreportQueryDto; import com.cdzy.common.model.EbikeUserFaultreportDto; +import com.cdzy.orders.mapper.EbikeOrderAttachmentFileMapper; +import com.cdzy.orders.model.dto.req.UserOrderFaultQueryDto; +import com.cdzy.orders.model.dto.res.EbikeUserDto; +import com.cdzy.orders.model.dto.res.OrderFaultReport; import com.cdzy.orders.model.entity.EbikeAttachefileAssociated; import com.cdzy.orders.model.entity.EbikeOrderAttachmentFile; import com.cdzy.orders.service.EbikeAttachefileAssociatedService; import com.cdzy.orders.service.EbikeOrderAttachmentFileService; import com.cdzy.orders.uitls.MinioUtil; import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryMethods; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.cdzy.orders.model.entity.EbikeUserFaultreport; @@ -22,11 +27,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Map; import static com.cdzy.orders.model.entity.table.EbikeAttachefileAssociatedTableDef.EBIKE_ATTACHEFILE_ASSOCIATED; +import static com.cdzy.orders.model.entity.table.EbikeOrderAttachmentFileTableDef.EBIKE_ORDER_ATTACHMENT_FILE; import static com.cdzy.orders.model.entity.table.EbikeUserFaultreportTableDef.EBIKE_USER_FAULTREPORT; +import static com.cdzy.orders.model.entity.table.EbikeUserTableDef.EBIKE_USER; /** * 用户上报故障信息 服务层实现。 @@ -36,7 +44,7 @@ import static com.cdzy.orders.model.entity.table.EbikeUserFaultreportTableDef.EB */ @Slf4j @Service -public class EbikeUserFaultreportServiceImpl extends ServiceImpl implements EbikeUserFaultreportService{ +public class EbikeUserFaultreportServiceImpl extends ServiceImpl implements EbikeUserFaultreportService { @Resource private EbikeAttachefileAssociatedService ebikeAttachmentFileAssosiatedService; @@ -47,6 +55,7 @@ public class EbikeUserFaultreportServiceImpl extends ServiceImpl attachmentFiles = ebikeOrderAttachmentFileService.getFilesByBusiId(id); if (!attachmentFiles.isEmpty()) { @@ -101,17 +110,17 @@ public class EbikeUserFaultreportServiceImpl extends ServiceImpl list(EbikeUserFaultreportQueryDto queryParam) { QueryWrapper query = QueryWrapper.create() .where(EBIKE_USER_FAULTREPORT.BIKE_CODE.eq(queryParam.getBikeCode())); - if(queryParam.getWorkorderId()==null||queryParam.getWorkorderId().isEmpty()){ + if (queryParam.getWorkorderId() == null || queryParam.getWorkorderId().isEmpty()) { query.and(EBIKE_USER_FAULTREPORT.WORKORDER_ID.isNull()); - }else{ + } else { query.and(EBIKE_USER_FAULTREPORT.WORKORDER_ID.eq(queryParam.getWorkorderId())); } - if(queryParam.getFaultPart()!=null&&!queryParam.getFaultPart().isEmpty()){ + if (queryParam.getFaultPart() != null && !queryParam.getFaultPart().isEmpty()) { query.and(EBIKE_USER_FAULTREPORT.FAULT_PART.like(queryParam.getFaultPart())); } List list = list(query); - if (list==null) { + if (list == null) { return null; } List dtoList = list.stream().map(entity -> { @@ -119,7 +128,7 @@ public class EbikeUserFaultreportServiceImpl extends ServiceImpl attachmentFiles = ebikeOrderAttachmentFileService.getFilesByBusiId(dto.getFaultReportId()) - .stream().map(attachmentFile ->{ + .stream().map(attachmentFile -> { EbikeOrderAttachmentFileDto attachmentFileDto = new EbikeOrderAttachmentFileDto(); BeanUtils.copyProperties(attachmentFile, attachmentFileDto); attachmentFileDto.setFileBucket(MinioUtil.BUCKET_ORDERS); @@ -138,14 +147,46 @@ public class EbikeUserFaultreportServiceImpl extends ServiceImpl getFaultListByWeChatUser(Map params) { - String userId= MapUtil.getStr(params,"userId"); - Map pageParam = ( Map)params.get("pageParam"); - Integer pageNum= MapUtil.getInt(pageParam,"pageNum"); - Integer pageSize= MapUtil.getInt(pageParam,"pageSize"); + public List getFaultListByWeChatUser(Map params) { + String userId = MapUtil.getStr(params, "userId"); + Map pageParam = (Map) params.get("pageParam"); + Integer pageNum = MapUtil.getInt(pageParam, "pageNum"); + Integer pageSize = MapUtil.getInt(pageParam, "pageSize"); QueryWrapper query = QueryWrapper.create(); - query.eq("report_user",userId); + query.eq("report_user", userId); Page paginate = ebikeUserFaultreportMapper.paginate(pageNum, pageSize, query); return paginate.getRecords(); } + + @Override + public Page getUserOrderFaultRecord(UserOrderFaultQueryDto userOrderFaultQueryDto) { + + QueryWrapper query = QueryWrapper.create() + .select(EBIKE_USER_FAULTREPORT.FAULT_PART, EBIKE_USER_FAULTREPORT.REPORT_AT, + EBIKE_USER_FAULTREPORT.FAULT_DESCRIPTION, EBIKE_USER.NICKNAME.as("report_user"), + QueryMethods.concat(EBIKE_USER_FAULTREPORT.LONGITUDE, + EBIKE_USER_FAULTREPORT.LATITUDE).as("coordinate"), + EBIKE_USER_FAULTREPORT.FAULT_REPORT_ID) + .leftJoin(EBIKE_USER).on(EBIKE_USER_FAULTREPORT.REPORT_USER.eq(EBIKE_USER.USER_ID)) + .where(EBIKE_USER_FAULTREPORT.ORDER_CODE.eq(userOrderFaultQueryDto.getOrderId())); + + Page page = userOrderFaultQueryDto.getPageParam().getPage(); + Page orderFaultReportPage = ebikeUserFaultreportMapper.paginateAs(page, query, OrderFaultReport.class); + List records = orderFaultReportPage.getRecords(); + for (OrderFaultReport record : records) { + QueryWrapper file = QueryWrapper.create() + .leftJoin(EBIKE_ATTACHEFILE_ASSOCIATED) + .on(EBIKE_ATTACHEFILE_ASSOCIATED.ATTACHE_FILE + .eq(EBIKE_ORDER_ATTACHMENT_FILE.FILE_KEY)) + .where(EBIKE_ATTACHEFILE_ASSOCIATED.BUSI_ID.eq(record.getFaultReportId())); + List list = ebikeOrderAttachmentFileService.list(file); + List fileUrl = new ArrayList<>(); + for (EbikeOrderAttachmentFile ebikeOrderAttachmentFile : list) { + String url = minioUtil.getBucketFileUrl(ebikeOrderAttachmentFile.getFileKey()); + fileUrl.add(url); + } + record.setImage(fileUrl); + } + return orderFaultReportPage; + } } From 2f947f961cea26593fa23a4418804a5d079f67f4 Mon Sep 17 00:00:00 2001 From: jkcdev Date: Thu, 22 May 2025 16:36:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=94=B3=E8=AF=B7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E8=AF=A6=E6=83=85=EF=BC=8C=E5=8E=BB=E9=99=A4=E8=B7=9D=E7=A6=BB?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E4=B8=8E=E5=AE=9E=E4=BD=93=E7=B1=BB=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E6=89=8B=E5=8A=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebike-common/pom.xml | 13 --- .../com/cdzy/common/utils/CoordinateUtil.java | 81 ------------------- .../controller/EbikeTrackingController.java | 9 ++- .../com/cdzy/payment/model/dto/PayInfo.java | 2 +- .../payment/service/EbikePaymentService.java | 2 +- .../service/impl/EbikePaymentServiceImpl.java | 5 +- .../service/impl/EbikeRefundServiceImpl.java | 1 - .../service/impl/WxPayServiceImpl.java | 65 +++++---------- .../java/com/cdzy/payment/utils/MapUtils.java | 61 ++++++++++++++ .../com/cdzy/payment/utils/StringUtils.java | 24 ++++++ 10 files changed, 116 insertions(+), 147 deletions(-) create mode 100644 ebike-payment/src/main/java/com/cdzy/payment/utils/MapUtils.java diff --git a/ebike-common/pom.xml b/ebike-common/pom.xml index 05170cc3..2ef33719 100644 --- a/ebike-common/pom.xml +++ b/ebike-common/pom.xml @@ -38,19 +38,6 @@ 6.10.0 - - - org.locationtech.jts - jts-core - 1.19.0 - - - - org.osgeo - proj4j - 0.1.0 - - diff --git a/ebike-common/src/main/java/com/cdzy/common/utils/CoordinateUtil.java b/ebike-common/src/main/java/com/cdzy/common/utils/CoordinateUtil.java index ef6b5f80..b9037810 100644 --- a/ebike-common/src/main/java/com/cdzy/common/utils/CoordinateUtil.java +++ b/ebike-common/src/main/java/com/cdzy/common/utils/CoordinateUtil.java @@ -1,12 +1,5 @@ package com.cdzy.common.utils; -import org.locationtech.jts.geom.Coordinate; -import org.locationtech.jts.geom.GeometryFactory; -import org.locationtech.jts.geom.LineString; -import org.osgeo.proj4j.*; - -import java.util.List; - /** * 坐标转换工具类。 * @@ -111,78 +104,4 @@ public class CoordinateUtil { return GCJ02ToBD(gcj02); } - private static final CRSFactory crsFactory = new CRSFactory(); - - /** - * GCJ-02 → WGS84 - * 输入的坐标点必须是GCJ-02坐标系的经纬度。 - * - * @param lon 经度 - * @param lat 纬度 - * @return WGS84坐标 - */ - public static Double[] GCJ02ToWGS84(double lon, double lat) { - // 使用Proj4j进行坐标转换(需添加Proj4j依赖) - CoordinateReferenceSystem gcj02 = crsFactory.createFromName("EPSG:4490"); // 国家2000坐标系(近似GCJ-02) - CoordinateReferenceSystem wgs84 = crsFactory.createFromName("EPSG:4326"); - CoordinateTransform transform = new CoordinateTransformFactory().createTransform(gcj02, wgs84); - - ProjCoordinate src = new ProjCoordinate(lon, lat); - ProjCoordinate dst = new ProjCoordinate(); - transform.transform(src, dst); - return new Double[]{dst.x, dst.y}; - } - - /** - * GCJ-02 → WGS84 - * 输入的坐标点必须是GCJ-02坐标系的经纬度。 - * - * @param lon 经度 - * @param lat 纬度 - * @return WGS84坐标 - */ - public static Coordinate gcj02ToWgs84(double lon, double lat) { - // 使用Proj4j进行坐标转换(需添加Proj4j依赖) - CoordinateReferenceSystem gcj02 = crsFactory.createFromName("EPSG:4490"); // 国家2000坐标系(近似GCJ-02) - CoordinateReferenceSystem wgs84 = crsFactory.createFromName("EPSG:4326"); - CoordinateTransform transform = new CoordinateTransformFactory().createTransform(gcj02, wgs84); - - ProjCoordinate src = new ProjCoordinate(lon, lat); - ProjCoordinate dst = new ProjCoordinate(); - transform.transform(src, dst); - return new Coordinate(dst.x, dst.y); - } - - private static final GeometryFactory geometryFactory = new GeometryFactory(); - - /** - * 计算路径总长度(单位:米) - * 输入的坐标点必须是WGS84坐标系的经纬度。 - * - * @param points 坐标点列表,每个点为[经度, 纬度] - * @return 总长度(米) - */ - public static Double calculateTotalDistance(List points) { - // 转换坐标并构建线串 - LineString lineString = convertToLineString(points); - - // 使用JTS计算几何距离(需确保坐标系为投影坐标系) - return lineString.getLength(); - } - - /** - * 转换坐标点列表为LineString - * - * @param points 坐标点列表 - * @return LineString对象 - */ - private static LineString convertToLineString(List points) { - Coordinate[] coords = new Coordinate[points.size()]; - for (int i = 0; i < points.size(); i++) { - Double[] p = points.get(i); - Coordinate wgs84Coord = gcj02ToWgs84(p[0], p[1]); // GCJ-02转WGS84 - coords[i]= new Coordinate(wgs84Coord.x, wgs84Coord.y); - } - return geometryFactory.createLineString(coords); - } } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeTrackingController.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeTrackingController.java index 03f80060..d96e4797 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeTrackingController.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeTrackingController.java @@ -75,10 +75,11 @@ public class EbikeTrackingController { siteInfo.setSiteId(siteId); if (siteId == null) { siteInfo.setSiteName( "不在站点范围内"); - } - EbikeSiteRegion siteRegion = ebikeSiteRegionService.getById(siteId); - if (siteRegion != null) { - siteInfo.setSiteName(siteRegion.getSiteName()); + }else { + EbikeSiteRegion siteRegion = ebikeSiteRegionService.getById(siteId); + if (siteRegion != null) { + siteInfo.setSiteName(siteRegion.getSiteName()); + } } return JsonResult.success(siteInfo); } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/PayInfo.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/PayInfo.java index 4969bd6b..98499487 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/PayInfo.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/PayInfo.java @@ -42,7 +42,7 @@ public class PayInfo { private LocalDateTime payTime; /** - * 总优惠金额 + * 交易流水号 */ private String tradingNumber; } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/service/EbikePaymentService.java b/ebike-payment/src/main/java/com/cdzy/payment/service/EbikePaymentService.java index b79cec7a..0e911e3f 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/service/EbikePaymentService.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/service/EbikePaymentService.java @@ -55,5 +55,5 @@ public interface EbikePaymentService extends IService { * @param orderId 退款id * @return 订单详情 */ - Map getOrderDetail(String orderId); + Map getOrderDetail(String orderId); } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikePaymentServiceImpl.java b/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikePaymentServiceImpl.java index a86ee496..478d0b6f 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikePaymentServiceImpl.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikePaymentServiceImpl.java @@ -88,7 +88,7 @@ public class EbikePaymentServiceImpl extends ServiceImpl getOrderDetail(String orderId) { QueryWrapper query = QueryWrapper.create() .select(EBIKE_PAYMENT.COST_PRICE.as("totalAmount"), EBIKE_PAYMENT.TOTAL.as("actualAmount"), EBIKE_USER_ORDERS.ORDER_ID.as("orderId"), EBIKE_USER_ORDERS.BIKE_CODE.as("bikeCode"), @@ -99,7 +99,8 @@ public class EbikePaymentServiceImpl extends ServiceImpl recDetail = ebikePaymentService.getOrderDetail(orderId); if (recDetail == null) { log.error("{} 订单不存在", orderId); return null; @@ -617,11 +618,11 @@ public class WxPayServiceImpl implements WxPayService { ResRefundOrderInfo orderInfo = new ResRefundOrderInfo(); // 订单信息 OrderInfo order = new OrderInfo(); - BeanUtils.copyProperties(recDetail, order); + MapUtils.copyProperties(recDetail, order); // 用户信息 UserInfo userInfo = new UserInfo(); - BeanUtils.copyProperties(recDetail, orderInfo); + MapUtils.copyProperties(recDetail, userInfo); orderInfo.setUserInfo(userInfo); // 车辆基本信息 EbikeBikeBaseInfo bike = null; @@ -634,13 +635,13 @@ public class WxPayServiceImpl implements WxPayService { // 借用信息 BorrowingInfo borrowingInfo = new BorrowingInfo(); - BeanUtils.copyProperties(recDetail, borrowingInfo); + MapUtils.copyProperties(recDetail, borrowingInfo); Double[] borrowLocation = getBikeLocation(borrowingInfo.getBorrowCarCoordinate()); if (bike != null) { if (borrowLocation != null) { ReqEbikeSiteQuery siteQuery = new ReqEbikeSiteQuery(); - siteQuery.setLatitude(borrowLocation[0]); - siteQuery.setLongitude(borrowLocation[1]); + siteQuery.setLatitude(borrowLocation[1]); + siteQuery.setLongitude(borrowLocation[0]); siteQuery.setAreaId(Long.parseLong(bike.getReginId())); JsonResult siteInfo = operateFeignClient.querySite(siteQuery); if (siteInfo.getCode() == Code.SUCCESS) { @@ -665,13 +666,13 @@ public class WxPayServiceImpl implements WxPayService { orderInfo.setBorrowingInfo(borrowingInfo); // 还车信息 ReturnInfo returnInfo = new ReturnInfo(); - BeanUtils.copyProperties(recDetail, returnInfo); + MapUtils.copyProperties(recDetail, returnInfo); Double[] returnLocation = getBikeLocation(returnInfo.getReturnCarCoordinate()); if (bike != null) { if (returnLocation != null) { ReqEbikeSiteQuery siteQuery = new ReqEbikeSiteQuery(); - siteQuery.setLatitude(returnLocation[0]); - siteQuery.setLongitude(returnLocation[1]); + siteQuery.setLatitude(returnLocation[1]); + siteQuery.setLongitude(returnLocation[0]); siteQuery.setAreaId(Long.parseLong(bike.getReginId())); JsonResult siteInfo = operateFeignClient.querySite(siteQuery); if (siteInfo.getCode() == Code.SUCCESS) { @@ -695,46 +696,15 @@ public class WxPayServiceImpl implements WxPayService { } // 骑行时长 if (order.getUnLockTime() != null && order.getLockTime() != null) { - order.setCyclingDuration(String.valueOf(Duration.between(order.getUnLockTime(), order.getLockTime()).toMinutes())); - } - // 轨迹里程 - if (order.getUnLockTime() != null && order.getLockTime() != null&& order.getBikeCode()!=null) { - ReqEbikeTrackingDto trackingDto = new ReqEbikeTrackingDto(); - trackingDto.setEbikeCode(order.getBikeCode()); - trackingDto.setStartTime(order.getUnLockTime()); - trackingDto.setEndTime(order.getLockTime()); - trackingDto.setInterval("30s"); - JsonResult tracking = operateFeignClient.queryEbikeTracking(trackingDto); - if (tracking.getCode() == Code.SUCCESS) { - List trackingList = JSON.parseArray(JSONObject.toJSONString(tracking.getData()), EbikeTrackingDto.class); - List trackingPoints = new ArrayList<>(trackingList.stream().map(t -> new Double[]{t.getLatitude(), t.getLongitude()}).toList()); - if (borrowLocation!=null){ - trackingPoints.add(0, borrowLocation); - } - if (returnLocation!=null){ - trackingPoints.add(returnLocation); - } - Double distance = CoordinateUtil.calculateTotalDistance(trackingPoints); - if (distance > 1000) { - order.setTrajectoryMileage(String.format("%.3f公里", distance)); - }else { - order.setTrajectoryMileage(String.format("%d米", Math.round(distance))); - } - }else { - log.error("获取车辆轨迹信息失败,订单编号: {}", orderId); - } - + String duration = StringUtils.getDurationTimeString(order.getUnLockTime(), order.getLockTime()); + order.setCyclingDuration(duration); } orderInfo.setOrderInfo(order); orderInfo.setReturnInfo(returnInfo); - // 支付信息 - PayInfo payInfo = new PayInfo(); - BeanUtils.copyProperties(recDetail, payInfo); - orderInfo.setPayInfo(payInfo); // 支付详情 OrderDetailInfo detailInfo = new OrderDetailInfo(); - BeanUtils.copyProperties(recDetail, detailInfo); + MapUtils.copyProperties(recDetail, detailInfo); detailInfo.setDiscountAmount(detailInfo.getTotalAmount() - detailInfo.getActualAmount()); //查询订单, orderFeingClient.getOrderById(orderId) JsonResult result = ordersFeignClient.getPaymentDetails(Long.valueOf(orderId)); @@ -750,8 +720,15 @@ public class WxPayServiceImpl implements WxPayService { } } } - orderInfo.setOrderDetailInfo(detailInfo); + // 支付信息 + PayInfo payInfo = new PayInfo(); + MapUtils.copyProperties(recDetail, payInfo); + // 优惠金额 + if (detailInfo.getTotalAmount()!= null && detailInfo.getActualAmount()!= null) { + payInfo.setDiscountAmount(detailInfo.getTotalAmount() - detailInfo.getActualAmount()); + } + orderInfo.setPayInfo(payInfo); return orderInfo; } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/utils/MapUtils.java b/ebike-payment/src/main/java/com/cdzy/payment/utils/MapUtils.java new file mode 100644 index 00000000..4d4080b5 --- /dev/null +++ b/ebike-payment/src/main/java/com/cdzy/payment/utils/MapUtils.java @@ -0,0 +1,61 @@ +package com.cdzy.payment.utils; + +import java.lang.reflect.Field; +import java.time.LocalDate; +import java.util.Map; + +/** + * Map工具类 + * + * @author dingchao + * @date 2025/5/22 + * @modified by: + */ +public class MapUtils { + + /** + * 将map中的值复制到对象中 + * 注意:map中的key必须和对象中的字段名一致 + * + * @param source + * @param target + */ + public static void copyProperties(Map source, Object target) { + Field[] fields = target.getClass().getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + Object value = source.getOrDefault(field.getName(), null); + if (value == null) { + continue; + } + try { + // 类型转换逻辑 + Class fieldType = field.getType(); + Object convertedValue = convertValue(value, fieldType); + field.set(target, convertedValue); + }catch (IllegalAccessException ignored) { + + } + } + } + + /** + * 自定义类型转换逻辑 + * + * @param source 源值 + * @param targetType 目标类型 + * @return + */ + private static Object convertValue(Object source, Class targetType) { + if (targetType == Integer.class) { + return Integer.parseInt(source.toString()); + } else if (targetType == Double.class) { + return Double.parseDouble(source.toString()); + } else if (targetType == LocalDate.class && source instanceof String) { + return LocalDate.parse((String) source); + } else if (targetType.isEnum() && source instanceof String) { + return Enum.valueOf((Class) targetType, (String) source); + } + return source; // 其他类型直接赋值 + } +} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java b/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java index 6013f88e..61f9f046 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java @@ -3,6 +3,7 @@ package com.cdzy.payment.utils; import com.mybatisflex.core.keygen.IKeyGenerator; import com.mybatisflex.core.keygen.KeyGeneratorFactory; +import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -63,7 +64,30 @@ public class StringUtils { return String.valueOf(key); } + /** + * 计算两个时间的时间差 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 时间差字符串,格式为:"小时小时分分秒秒" + */ + public static String getDurationTimeString(LocalDateTime startTime, LocalDateTime endTime) { + Duration duration = Duration.between(startTime, endTime); + long totalSeconds = duration.toSeconds(); + final int[] units = {3600, 60, 1}; + String[] labels = {"小时", "分", "秒"}; + StringBuilder result = new StringBuilder(); + for (int i = 0; i < units.length; i++) { + long value = totalSeconds / units[i]; + if (value > 0 || !result.isEmpty()) { + result.append(value).append(labels[i]); + totalSeconds %= units[i]; + } + } + + return result.toString(); + } //public static void main(String[] args) { // System.out.println(formatLocalDatetime(LocalDateTime.now()));