ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
@@ -3,10 +3,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.integration.api.feignClient.IotInterfaceClient; import com.ruoyi.integration.api.feignClient.SwitchwayGateClient; import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.SwitchwayGateReq; import com.ruoyi.integration.api.vo.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -35,6 +32,11 @@ public R<DeleteDeviceResp> deleteDevice(String deviceId) { return R.fail("删除设备失败:" + throwable.getMessage()); } @Override public R<ShowDeviceResp> showDeviceRequest(String deviceId) { return R.fail("查询设备失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
@@ -6,6 +6,7 @@ import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -35,4 +36,12 @@ */ @PostMapping("/iotInterface/deleteDevice") R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId); /** * 查询设备 * @param deviceId * @return */ @PostMapping("/iotInterface/showDeviceRequest") R<ShowDeviceResp> showDeviceRequest(@RequestParam("deviceId") String deviceId); } ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java
@@ -13,7 +13,7 @@ @Document(collection = "confirm_transaction_record") //指定要对应的文档名(表名) @Accessors(chain = true) public class ConfirmTransactionRecord extends BaseModel { private String transaction_serial_number;// 桩编码 private String transaction_serial_number;// 交易流水号 private Integer confirm_result;// 确认结果(0:上传成功,1:非法账单) } ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java
New file @@ -0,0 +1,68 @@ package com.ruoyi.integration.api.vo; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2024/12/31 16:19 */ @Data public class ShowDeviceResp { @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("app_id") private String appId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("app_name") private String appName; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("device_id") private String deviceId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("node_id") private String nodeId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("gateway_id") private String gatewayId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("device_name") private String deviceName; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("node_type") private String nodeType; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("description") private String description; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("fw_version") private String fwVersion; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("sw_version") private String swVersion; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("device_sdk_version") private String deviceSdkVersion; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("product_id") private String productId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("product_name") private String productName; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("status") private String status; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("create_time") private String createTime; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("connection_status_update_time") private String connectionStatusUpdateTime; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("active_time") private String activeTime; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("extension_info") private Object extensionInfo; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java
@@ -40,8 +40,5 @@ @ApiModelProperty(value = "充电订单id") private Long chargingOrderId; private Long start; private Long end; private BigDecimal chargingCapacity; } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
@@ -187,9 +187,6 @@ public void checkPermiOr(String... permissions) { Set<String> permissionList = getPermiList(); if(null == permissionList){ return; } for (String permission : permissions) { if (hasPermi(permissionList, permission)) @@ -356,9 +353,8 @@ try { LoginUser loginUser = getLoginUser(); String userType = loginUser.getUserType(); if(null != userType && "applet".equals(userType)){ return null; if(null == loginUser.getPermissions()){ return new HashSet<>(); } return loginUser.getPermissions(); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -505,7 +505,7 @@ } @RequiresPermissions(value = {"/appUser/select", "/vipList/select"}, logical = Logical.OR) @ApiOperation(value = "用户详情积分明细", tags = {"后台-用户管理-用户列表","小程序-个人中心"}) @ApiOperation(value = "用户详情积分明细", tags = {"后台-用户管理-用户列表"}) @PostMapping(value = "/user/points/page") public R<Page<TAppUserIntegralChange>> pointsDetail(@RequestBody PointsQueryDto pointsQueryDto) { if (pointsQueryDto.getUserId()==null){ @@ -554,6 +554,59 @@ return R.ok(page); } @ApiOperation(value = "用户详情积分明细", tags = {"小程序-个人中心"}) @PostMapping(value = "/user/points/page1") public R<Page<TAppUserIntegralChange>> pointsDetail1(@RequestBody PointsQueryDto pointsQueryDto) { if (pointsQueryDto.getUserId()==null){ pointsQueryDto.setUserId(tokenService.getLoginUserApplet().getUserId()); } List<Integer> types = new ArrayList<>(); if (pointsQueryDto.getType()==null){ types.add(1); types.add(2); types.add(3); types.add(4); types.add(5); types.add(6); }else if (pointsQueryDto.getType()==1){ types.add(1); types.add(2); types.add(3); types.add(4); types.add(5); }else if (pointsQueryDto.getType()==2){ types.add(6); } Page<TAppUserIntegralChange> page = integralChangeService.lambdaQuery() .eq(TAppUserIntegralChange::getAppUserId, pointsQueryDto.getUserId()) .orderByDesc(TAppUserIntegralChange::getCreateTime) .eq(pointsQueryDto.getChangeType() != null, TAppUserIntegralChange::getChangeType, pointsQueryDto.getChangeType()) .in(!types.isEmpty(), TAppUserIntegralChange::getChangeType, types).page(Page.of(pointsQueryDto.getPageCurr(), pointsQueryDto.getPageSize())); for (TAppUserIntegralChange record : page.getRecords()) { record.setDateTime(record.getCreateTime()); record.setUid(record.getId().toString()); if (record.getChangeType()==2||record.getChangeType()==3){ R<TChargingOrder> tChargingOrderR = chargingOrderClient.orderDetail(Long.valueOf(record.getExtension())); if (tChargingOrderR.getData()!=null) { record.setOrderNum(tChargingOrderR.getData().getCode()); } } if (record.getChangeType()==6){ R<TExchangeOrder> tExchangeOrderR = exchangeOrderClient.orderDetail(Long.valueOf(record.getExtension())); if (tExchangeOrderR.getData()!=null){ record.setOrderNum(tExchangeOrderR.getData().getCode()); } } } return R.ok(page); } @ApiOperation(value = "积分详情", tags = {"小程序-个人中心"}) @GetMapping(value = "/user/points/detail") ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -484,13 +484,17 @@ return AjaxResult.success(chargingPileService.getChargingGunList(siteId,type)); } @ApiOperation(value = "获取站点下充电枪数量统计", tags = {"小程序-站点管理-站点详情","管理后台-数据分析-电站分析"}) @ApiOperation(value = "获取站点下充电枪数量统计", tags = {"管理后台-数据分析-电站分析"}) @GetMapping("/getChargingGunCount") public AjaxResult<Map<String,ChargingGunCountVO>> getChargingGunCount(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId){ return AjaxResult.success(chargingGunService.getChargingGunCount(siteId)); } @ApiOperation(value = "获取站点下充电枪数量统计", tags = {"小程序-站点管理-站点详情"}) @GetMapping("/getChargingGunCount1") public AjaxResult<Map<String,ChargingGunCountVO>> getChargingGunCount1(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId){ return AjaxResult.success(chargingGunService.getChargingGunCount(siteId)); } @RequiresPermissions(value = {"/site/add"}, logical = Logical.OR) @ResponseBody ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -176,13 +176,13 @@ } // 查询最高折扣的会员 TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData(); strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount()); strategyPriceVO.setServiceFeeDiscount(null == monthlyCardDiscount ? new BigDecimal(10) : monthlyCardDiscount.getMonthlyCardDiscount()); // 查询最高优惠的会员 TVip maximumDeduction = vipClient.getVipInfoByType(1).getData(); strategyPriceVO.setMaxDiscountAmount(maximumDeduction.getMaximumDeduction()); strategyPriceVO.setMaxDiscountAmount(null == maximumDeduction ? new BigDecimal(10) : maximumDeduction.getMaximumDeduction()); // 查询最低起步价会员 TVip monthlyCard = vipClient.getVipInfoByType(2).getData(); strategyPriceVO.setVipStartPrice(monthlyCard.getMonthlyCard()); strategyPriceVO.setVipStartPrice(null == monthlyCard ? new BigDecimal(10) : monthlyCard.getMonthlyCard()); // 模板折扣 strategyPriceVO.setDiscount(accountingStrategy.getDiscount()); return strategyPriceVO; ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -30,6 +30,10 @@ import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.QrCodeDelivery; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; @@ -173,18 +177,23 @@ return AjaxResult.error("设备编号已存在"); } //调用华为Iot创建设备 // AddDevice addDevice = new AddDevice(); // addDevice.setProductId("66da68d21837002b28b34ec0"); // addDevice.setNodeId(chargingPile.getCode()); // addDevice.setDeviceName(chargingPile.getName()); // addDevice.setDescription(chargingPile.getNumber().toString()); // AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); // if(null != deviceResp){ // int httpStatusCode = deviceResp.getHttpStatusCode(); // if(httpStatusCode == 201){ // chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); // } // } AddDevice addDevice = new AddDevice(); addDevice.setProductId("66da68d21837002b28b34ec0"); addDevice.setNodeId(chargingPile.getCode()); addDevice.setDeviceName(chargingPile.getName()); addDevice.setDescription(chargingPile.getNumber().toString()); AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); if(null != deviceResp){ int httpStatusCode = deviceResp.getHttpStatusCode(); if(httpStatusCode == 201){ chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); }else{ log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); return AjaxResult.error("华为创建设备失败"); } }else{ return AjaxResult.error("华为创建设备失败"); } this.save(chargingPile); return AjaxResult.success(); } @@ -248,6 +257,34 @@ if(null != one && !one.getId().equals(chargingPile.getId())){ return AjaxResult.error("设备编号已存在"); } TChargingPile tChargingPile = this.getById(chargingPile.getId()); ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); if(null != showDeviceResp){ DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(tChargingPile.getCode()).getData(); if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){ return AjaxResult.error("删除设备异常,请查看华为设备管理"); } } //调用华为Iot创建设备 AddDevice addDevice = new AddDevice(); addDevice.setProductId("66da68d21837002b28b34ec0"); addDevice.setNodeId(chargingPile.getCode()); addDevice.setDeviceName(chargingPile.getName()); addDevice.setDescription(chargingPile.getNumber().toString()); AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); if(null != deviceResp){ int httpStatusCode = deviceResp.getHttpStatusCode(); if(httpStatusCode == 201){ chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); }else{ log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); return AjaxResult.error("华为创建设备失败"); } }else{ return AjaxResult.error("华为创建设备失败"); } this.updateById(chargingPile); List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0)); @@ -288,11 +325,17 @@ for (Integer id : ids) { TChargingPile chargingPile = this.getById(id); //调用华为Iot删除设备 // if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){ // DeleteDeviceResp deviceResp = iotInterfaceClient.deleteDevice(chargingPile.getIotdDeviceId()).getData(); // if(null != deviceResp && deviceResp.getHttpStatusCode() == 0){ // } // } if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){ ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(chargingPile.getCode()).getData(); if(null != showDeviceResp){ DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(chargingPile.getCode()).getData(); if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){ return AjaxResult.error("删除设备异常,请查看华为设备管理"); } chargingPile.setIotdDeviceId(""); } } this.removeById(chargingPile); } return AjaxResult.success(); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
@@ -6,6 +6,7 @@ import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import com.ruoyi.integration.iotda.utils.api.IotInterfaceUtil; import org.springframework.web.bind.annotation.*; @@ -45,4 +46,15 @@ public R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId){ return iotInterfaceUtil.deleteDeviceRequest(deviceId); } /** * 查询设备 * @param deviceId * @return */ @PostMapping("/showDeviceRequest") public R<ShowDeviceResp> showDeviceRequest(@RequestParam("deviceId") String deviceId){ return iotInterfaceUtil.showDeviceRequest(deviceId); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
@@ -1,5 +1,6 @@ package com.ruoyi.integration.iotda.controller; import com.alibaba.fastjson.JSON; import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.iotda.enums.ServiceIdMenu; import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; @@ -116,10 +117,10 @@ * @param confirmTransactionRecord 实体对象 * @return */ @PostMapping("/confirmTransactionRecord") public String confirmTransactionRecord(@RequestBody ConfirmTransactionRecord confirmTransactionRecord){ return iotMessageProduce.sendMessage(confirmTransactionRecord.getTransaction_serial_number(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord)); } // @PostMapping("/confirmTransactionRecord") // public String confirmTransactionRecord(@RequestBody ConfirmTransactionRecord confirmTransactionRecord){ // return iotMessageProduce.sendMessage(confirmTransactionRecord.getTransaction_serial_number(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord)); // } /** * 远程账户余额更新 @@ -235,6 +236,7 @@ */ @PostMapping("/qrCodeDelivery") public String qrCodeDelivery(@RequestBody QrCodeDelivery qrCodeDelivery){ log.info("二维码下发:{}", JSON.toJSONString(qrCodeDelivery)); return iotMessageProduce.sendMessage(qrCodeDelivery.getCharging_pile_code(), ServiceIdMenu.QR_CODE_DELIVERY.getKey(),messageUtil.qrCodeDelivery(qrCodeDelivery)); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
@@ -8,6 +8,7 @@ import com.ruoyi.common.core.utils.CodeGenerateUtils; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import com.ruoyi.integration.iotda.builder.IotBuilder; import com.ruoyi.integration.iotda.config.IotDAConfig; import lombok.extern.slf4j.Slf4j; @@ -256,4 +257,33 @@ } return R.fail(); } /** * 查询设备 * @param deviceId * @return */ public R<ShowDeviceResp> showDeviceRequest(String deviceId) { ShowDeviceRequest request = new ShowDeviceRequest(); request.withDeviceId(deviceId); try { ShowDeviceResponse response = iotBuilder.buildIot().showDevice(request); log.info("查询设备:{}",response.toString()); ShowDeviceResp showDeviceResp = new ShowDeviceResp(); BeanUtils.copyProperties(response, showDeviceResp); return R.ok(showDeviceResp); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return R.fail(); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -235,7 +235,7 @@ ConfirmTransactionRecord confirmTransactionRecord = new ConfirmTransactionRecord(); confirmTransactionRecord.setTransaction_serial_number(transactionRecordMessage.getTransaction_serial_number()); confirmTransactionRecord.setConfirm_result(0); iotMessageProduce.sendMessage(confirmTransactionRecord.getTransaction_serial_number(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord)); iotMessageProduce.sendMessage(transactionRecordMessage.getCharging_pile_code(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord)); sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.UPDATE_BALANCE_REPLY: ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
@@ -39,14 +39,11 @@ */ @PostMapping("/sendMessage") public String sendMessage(String code, String name, JSONObject message){ log.info("消息下发至设备:code={},name={},message={}", code, name, message); CreateMessageRequest request = new CreateMessageRequest(); System.err.println(code); System.err.println(JSONObject.toJSONString(config)); if(config.getTest() && code.equals(config.getTestDriverCode())){ request.withDeviceId(config.getTestDeviceId()); }else{ request.withDeviceId(config.getDeviceId()); } request.withDeviceId(code); DeviceMessageRequest body = new DeviceMessageRequest(); body.withMessageId(UUID.randomUUID().toString()); body.withName(name); ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml
@@ -24,7 +24,7 @@ nacos: discovery: # 服务注册地址 server-addr: 192.168.110.169:8848 server-addr: 127.0.0.1:8848 service: ${spring.application.name} group: DEFAULT_GROUP namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb @@ -32,7 +32,7 @@ password: nacos config: # 配置中心地址 server-addr: 192.168.110.169:8848 server-addr: 127.0.0.1:8848 namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP name: ${spring.application.name} @@ -57,7 +57,7 @@ type: nacos nacos: # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties @@ -75,7 +75,7 @@ nacos: application: seata-server # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos @@ -90,7 +90,7 @@ nacos: discovery: # 开发环境 # server-addr: 192.168.110.169:8848 # nacos注册中心地址 # server-addr: 127.0.0.1:8848 # nacos注册中心地址 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -230,7 +230,7 @@ data.setRecords(res1); return R.ok(data); } public static List<PayOrderDto> testing5(long total, long current, long size, List<PayOrderDto> str){ public static List<PayOrderDto> testing5(long total, long current, long size, List<PayOrderDto> str){ List<PayOrderDto> result = new ArrayList<>(); //获取初始化分页结构 com.ruoyi.order.util.Page<PayOrderDto> page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1); @@ -780,6 +780,13 @@ } // @PostMapping("/endChargeBillingCharge1") // public void endChargeBillingCharge1(@RequestBody TransactionRecordMessageVO vo){ // log.info("-------------------停止充电返回账单后计算费用及修改业务状态-------------------:" + vo); // chargingOrderService.endChargeBillingCharge1(vo); // } @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR) ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -314,7 +314,7 @@ @GetMapping("/getMyShoppingOrderInfo/{id}") @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单", "管理后台-支付订单-订单信息"}) @ApiOperation(value = "获取购买订单详情", tags = {"管理后台-支付订单-订单信息"}) public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id) { TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); Long userId = tokenService.getLoginUserApplet().getUserId(); @@ -326,6 +326,20 @@ } @GetMapping("/getMyShoppingOrderInfo1/{id}") @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单"}) public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo1(@PathVariable String id) { TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); Long userId = tokenService.getLoginUserApplet().getUserId(); if(!shoppingOrder.getAppUserId().equals(userId)){ return AjaxResult.error("权限不足"); } MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id); return AjaxResult.success(info); } @PutMapping("/confirmReceipt/{id}") @ApiOperation(value = "确认收货操作", tags = {"小程序-商城购买订单"}) public AjaxResult confirmReceipt(@PathVariable String id) { ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -178,6 +178,12 @@ */ void endChargeBillingCharge(TransactionRecordMessageVO vo); // /** // * 停止充电返回账单后计算费用 // * @param vo // */ // void endChargeBillingCharge1(TransactionRecordMessageVO vo); /** ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1928,83 +1928,134 @@ chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>(); for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); try { AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) Object invoke = null; switch (strategyDetail.getType()){ case 1: //充电度数 invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); try { //跨天 if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){ //当天的 //开始通过计费策略遍历解析每个时段的费用明细 String start_time = vo.getStart_time(); String end_time = vo.getEnd_time(); long start = sdfs.parse(start_time).getTime(); long end = sdfs.parse(end_time).getTime(); Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); /** * "start_time": "2025-01-03 23:06:43.00", * "end_time": "2025-01-04 00:39:39.00", */ for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) { AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1); long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime(); if(time < start){ break; case 2: //充电度数 invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); break; case 3: //充电度数 invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); break; case 4: //充电度数 invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); break; } //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) Object invoke = null; switch (strategyDetail.getType()){ case 1: //充电度数 invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo); break; case 2: //充电度数 invoke = clazz.getMethod("getPeak_charge" + (i)).invoke(vo); break; case 3: //充电度数 invoke = clazz.getMethod("getFlat_charge" + (i)).invoke(vo); break; case 4: //充电度数 invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo); break; } if(null == invoke || Double.valueOf(invoke.toString()) == 0){ continue; } BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); BeanUtils.copyProperties(strategyDetail, vo1); vo1.setChargingCapacity(sharp_peak_charge); lists.add(vo1); } if(null == invoke || Double.valueOf(invoke.toString()) == 0){ continue; //第二天的 //开始通过计费策略遍历解析每个时段的费用明细 for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime(); if(time > end){ break; } //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) Object invoke = null; switch (strategyDetail.getType()){ case 1: //充电度数 invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); break; case 2: //充电度数 invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); break; case 3: //充电度数 invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); break; case 4: //充电度数 invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); break; } if(null == invoke || Double.valueOf(invoke.toString()) == 0){ continue; } BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); BeanUtils.copyProperties(strategyDetail, vo1); vo1.setChargingCapacity(sharp_peak_charge); lists.add(vo1); } BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); BeanUtils.copyProperties(strategyDetail, vo1); vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime()); vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime()); vo1.setChargingCapacity(sharp_peak_charge); lists.add(vo1); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } catch (ParseException e) { throw new RuntimeException(e); }else{ for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) Object invoke = null; switch (strategyDetail.getType()){ case 1: //充电度数 invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); break; case 2: //充电度数 invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); break; case 3: //充电度数 invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); break; case 4: //充电度数 invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); break; } if(null == invoke || Double.valueOf(invoke.toString()) == 0){ continue; } BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); BeanUtils.copyProperties(strategyDetail, vo1); vo1.setChargingCapacity(sharp_peak_charge); lists.add(vo1); } } } Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() { public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) { return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1; } }); if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){ List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists); for (AccountingStrategyDetailOrderVo orderVo : list1) { Calendar start = Calendar.getInstance(); start.setTimeInMillis(orderVo.getStart()); start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); orderVo.setStart(start.getTimeInMillis()); Calendar end = Calendar.getInstance(); end.setTimeInMillis(orderVo.getEnd()); end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1); orderVo.setEnd(end.getTimeInMillis()); } lists.addAll(list1); }catch (Exception e){ e.printStackTrace(); } //开始处理明细 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS"); SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm"); Date start = null; Date end = null; try { start = sdf3.parse(vo.getStart_time()); end = sdf3.parse(vo.getEnd_time()); } catch (ParseException e) { throw new RuntimeException(e); } for (AccountingStrategyDetailOrderVo strategyDetail : lists) { for (int i = 0; i < lists.size(); i++) { AccountingStrategyDetailOrderVo strategyDetail = lists.get(i); BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity(); TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); @@ -2013,16 +2064,17 @@ chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence()); chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge()); chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge()); if(start.getTime() >= strategyDetail.getStart()){ chargingOrderAccountingStrategy.setStartTime(sdf2.format(start)); if(i == 0){ String time = vo.getStart_time().split(" ")[1]; chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":"))); }else{ chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime()); } if(end.getTime() >= strategyDetail.getEnd()){ chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime()); if(i == lists.size() - 1){ String time = vo.getEnd_time().split(" ")[1]; chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":"))); }else{ chargingOrderAccountingStrategy.setEndTime(sdf2.format(end)); chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime()); } //已充电总度数 @@ -2046,8 +2098,8 @@ periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); total = total.add(electrovalenc.add(originalServicePrice)); } //原金额 @@ -2283,6 +2335,445 @@ } } // /** // * 停止充电返回账单后计算费用 // * @param vo // */ // @Override // @GlobalTransactional(rollbackFor = Exception.class) // public void endChargeBillingCharge1(TransactionRecordMessageVO vo) { // TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number())); // Integer status = chargingOrder.getStatus(); //// if(status == 5){ //// return; //// } // // //如果使用优惠券需要判断优惠券是否满足使用条件 // //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) // //退款金额=优惠券金额+剩余充电金额 // BigDecimal periodElectricPrice_total = BigDecimal.ZERO; // BigDecimal periodServicePrice_total = BigDecimal.ZERO; // BigDecimal total = BigDecimal.ZERO; // // //获取订单的计费策略 // List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); // accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59"); // //开始处理计费明细数据和优惠数据 //// chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); // SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>(); // try { // //跨天 // if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){ // //当天的 // //开始通过计费策略遍历解析每个时段的费用明细 // String start_time = vo.getStart_time(); // String end_time = vo.getEnd_time(); // long start = sdfs.parse(start_time).getTime(); // long end = sdfs.parse(end_time).getTime(); // Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); // /** // * "start_time": "2025-01-03 23:06:43.00", // * "end_time": "2025-01-04 00:39:39.00", // */ // for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) { // AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1); // long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime(); // if(time < start){ // break; // } // //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) // Object invoke = null; // switch (strategyDetail.getType()){ // case 1: // //充电度数 // invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo); // break; // case 2: // //充电度数 // invoke = clazz.getMethod("getPeak_charge" + (i)).invoke(vo); // break; // case 3: // //充电度数 // invoke = clazz.getMethod("getFlat_charge" + (i)).invoke(vo); // break; // case 4: // //充电度数 // invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo); // break; // } // if(null == invoke || Double.valueOf(invoke.toString()) == 0){ // continue; // } // BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); // AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); // BeanUtils.copyProperties(strategyDetail, vo1); // vo1.setChargingCapacity(sharp_peak_charge); // lists.add(vo1); // } // // //第二天的 // //开始通过计费策略遍历解析每个时段的费用明细 // for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { // AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); // long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime(); // if(time > end){ // break; // } // //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) // Object invoke = null; // switch (strategyDetail.getType()){ // case 1: // //充电度数 // invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); // break; // case 2: // //充电度数 // invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); // break; // case 3: // //充电度数 // invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); // break; // case 4: // //充电度数 // invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); // break; // } // if(null == invoke || Double.valueOf(invoke.toString()) == 0){ // continue; // } // BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); // AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); // BeanUtils.copyProperties(strategyDetail, vo1); // vo1.setChargingCapacity(sharp_peak_charge); // lists.add(vo1); // } // }else{ // for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { // Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); // AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); // //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) // Object invoke = null; // switch (strategyDetail.getType()){ // case 1: // //充电度数 // invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); // break; // case 2: // //充电度数 // invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); // break; // case 3: // //充电度数 // invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); // break; // case 4: // //充电度数 // invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); // break; // } // if(null == invoke || Double.valueOf(invoke.toString()) == 0){ // continue; // } // BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); // AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); // BeanUtils.copyProperties(strategyDetail, vo1); // vo1.setChargingCapacity(sharp_peak_charge); // lists.add(vo1); // } // } // }catch (Exception e){ // e.printStackTrace(); // } // // //开始处理明细 // for (int i = 0; i < lists.size(); i++) { // AccountingStrategyDetailOrderVo strategyDetail = lists.get(i); // BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity(); // TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); // chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); // chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId()); // chargingOrderAccountingStrategy.setType(strategyDetail.getType()); // chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence()); // chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge()); // chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge()); // if(i == 0){ // String time = vo.getStart_time().split(" ")[1]; // chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":"))); // }else{ // chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime()); // } // if(i == lists.size() - 1){ // String time = vo.getEnd_time().split(" ")[1]; // chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":"))); // }else{ // chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime()); // } // // //已充电总度数 // BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge); // BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge); // BigDecimal serviceCharge = originalServicePrice; // BigDecimal vipDiscountAmount = BigDecimal.ZERO; // //计算优惠金额 // if(null != chargingOrder.getVipDiscount()){ // vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())); // serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()); // } // chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge); // chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); //// chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); // System.err.println("----------"+JSON.toJSONString(chargingOrderAccountingStrategy)); // // periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); // periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); // total = total.add(electrovalenc.add(originalServicePrice)); // // } // // // //原金额 // BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); // BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount(); // //总金额(充值金额+会员折扣金额) // BigDecimal decimal = rechargeAmount.add(vipDiscountAmount); // //退款金额(已经计算了折扣优惠部分) // //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额) // BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total)); // BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); // BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue()); // //折扣金额 // BigDecimal discountAmount = BigDecimal.ZERO; //// if(null != chargingOrder.getVipDiscount()){ //// TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); //// //判断会员是否还有充电优惠次数 //// GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); //// getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); //// getAppUserVipDetail.setVipId(appUser.getVipId()); //// TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); //// if(null != data && data.getChargeNum() > 0){ //// data.setChargeNum(data.getChargeNum() - 1); //// appUserVipDetailClient.updateAppUserVipDetail(data); //// //// //服务费折扣 //// discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount()))); //// TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); //// BigDecimal maximumDeduction = vip.getMaximumDeduction(); //// //普通会员有最高优惠限制 //// if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){ //// discountAmount = maximumDeduction; //// } //// } //// } // //会员折扣金额 // discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN); // payAmount = payAmount.subtract(discountAmount); // periodServicePrice_total = periodServicePrice_total.subtract(discountAmount); // // TChargingOrder order = new TChargingOrder(); // order.setId(chargingOrder.getId()); // order.setAppUserId(chargingOrder.getAppUserId()); // UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData(); // if(null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()){ // Integer soc = uploadRealTimeMonitoringData.getSoc(); // order.setEndMode(soc > 98 ? 2 : 3); // }else{ // order.setEndMode(1); // } // order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN)); // order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); // order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); // order.setStatus(5); // order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN)); // order.setChargingCapacity(vo.getTotal_electricity()); // order.setElectricity(vo.getTotal_electricity()); // // //计算优惠券 // BigDecimal couponDiscount = BigDecimal.ZERO; //// if(null != chargingOrder.getAppCouponId()){ //// //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 //// TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData(); //// String couponJson = appCoupon.getCouponJson(); //// TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class); //// Integer preferentialMode = tCoupon.getPreferentialMode(); //// if(1 == preferentialMode){ //// //满减 //// if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ //// BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount(); //// //如果优惠金额大于服务费金额,以服务费作为最大限制 //// if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){ //// couponDiscount = periodServicePrice_total; //// periodServicePrice_total = BigDecimal.ZERO; //// }else{ //// couponDiscount = couponDiscountAmount; //// } //// appCoupon.setStatus(2); ////// appCouponClient.updateAppCoupon(appCoupon); //// }else{ //// order.setAppCouponId(null); //// order.setCouponDiscountAmount(BigDecimal.ZERO); ////// appCouponClient.refund(chargingOrder.getAppCouponId().toString()); //// } //// } //// if(2 == preferentialMode){ //// //抵扣 //// if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ //// //折扣金额 //// BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); //// divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; //// //如果优惠金额大于服务费金额,以服务费作为最大限制 //// if(periodServicePrice_total.compareTo(divide) < 0){ //// couponDiscount = periodServicePrice_total; //// periodServicePrice_total = BigDecimal.ZERO; //// }else{ //// couponDiscount = divide; //// } //// //// appCoupon.setStatus(2); //// appCouponClient.updateAppCoupon(appCoupon); //// }else{ //// order.setAppCouponId(null); //// order.setCouponDiscountAmount(BigDecimal.ZERO); //// appCouponClient.refund(chargingOrder.getAppCouponId().toString()); //// } //// } //// } // //优惠券优惠金额 // couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN); // refundAmount = refundAmount.add(couponDiscount); // payAmount = payAmount.subtract(couponDiscount); // if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){ // periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount); // } // order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN)); // order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN)); // order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setRefundStatus(1); //// this.updateById(order); // System.err.println("----------"+JSON.toJSONString(order)); //// chargingOrder = this.getById(order.getId()); //// //// //开始将优惠券优惠的金额添加到明细中 //// BigDecimal couponDiscountAmount = order.getCouponDiscountAmount(); //// if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){ //// List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId())); //// BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); //// for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) { //// BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice(); //// BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN))); //// periodServicePrice = periodServicePrice.subtract(multiply); //// chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN)); //// chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN)); //// } ////// chargingOrderAccountingStrategyService.updateBatchById(list); //// } //// //// // 将枪状态重置为空闲 //// TChargingGun chargingGun = new TChargingGun(); //// chargingGun.setId(chargingOrder.getChargingGunId()); //// chargingGun.setStatus(2); //// chargingGun.setChargingPower(BigDecimal.ZERO); ////// chargingGunClient.updateChargingGunById(chargingGun); //// //// //添加积分 //// TIntegralRule integralRule = integralRuleClient.getSet().getData(); //// if(null != integralRule){ //// TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); //// Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); //// Integer integral = chargingOrder.getServiceCharge().intValue() * num1; //// if(null != appUser.getVipId()){ //// TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); //// Integer doubleIntegration = vip.getDoubleIntegration(); //// //双倍积分 //// if(1 == doubleIntegration){ //// integral *= 2; //// } //// } //// //// if(integral > 0){ //// TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); //// appUserIntegralChange.setAppUserId(appUser.getId()); //// appUserIntegralChange.setChangeType(2); //// appUserIntegralChange.setHistoricalIntegral(appUser.getPoints()); //// appUser.setPoints(appUser.getPoints() + integral); //// appUserIntegralChange.setCurrentIntegral(appUser.getPoints()); //// appUserIntegralChange.setCreateTime(LocalDateTime.now()); //// appUserIntegralChange.setOrderCode(chargingOrder.getCode()); //// appUserIntegralChange.setExtension(chargingOrder.getId().toString()); //// appUserClient.updateAppUser(appUser); //// appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); //// } //// } //// //// //计算用户标签 //// editUserTag(chargingOrder); //// //用户推荐奖励 //// referralReward(chargingOrder); //// //// //开始构建退款费用 //// if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ //// Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); //// //构建退款明细 //// TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); //// chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); //// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); //// chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); //// chargingOrderRefund.setRefundAmount(refundAmount); //// chargingOrderRefund.setRefundStatus(1); //// chargingOrderRefund.setPayType(rechargePaymentType); //// chargingOrderRefund.setRefundStatus(1); //// chargingOrderRefund.setCode(chargingOrder.getCode()); //// chargingOrderRefund.setRefundTitle("充电完成退款"); //// chargingOrderRefund.setRefundContent("充电完成退款"); //// chargingOrderRefund.setRefundReason("充电完成退款"); //// chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount()); //// chargingOrderRefund.setRefundTotalAmount(refundAmount); //// chargingOrderRefund.setPayAmount(rechargeAmount); //// if(1 == rechargePaymentType){ //// WxPaymentRefundModel model = new WxPaymentRefundModel(); //// model.setOut_trade_no(chargingOrder.getCode()); //// model.setOut_refund_no(chargingOrderRefund.getRefundCode()); //// model.setReason("充电完成退款"); //// model.setNotify_url("/payment/wx/refund/notify"); //// WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); //// amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); //// amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); //// amount.setCurrency("CNY"); //// model.setAmount(amount); //// R<String> orderR = wxPaymentClient.refundOrderR(model); //// if(200 == orderR.getCode()){ //// chargingOrderRefundService.save(chargingOrderRefund); //// } //// } //// if(2 == rechargePaymentType){ //// RefundReq dto = new RefundReq(); //// dto.setOutTradeNo(chargingOrder.getCode()); //// dto.setOutRequestNo(chargingOrderRefund.getCode()); //// dto.setRefundAmount(refundAmount.toString()); //// dto.setRefundReason("充电完成退款"); //// RefundResp resp = aliPaymentClient.refund(dto).getData(); //// if(null != resp){ //// AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null); //// if(success.isSuccess()){ //// chargingOrderRefundService.save(chargingOrderRefund); //// } //// } //// } //// //// } // } @Override public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) { return this.baseMapper.getByDate(chargingOrderIds); ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml
@@ -23,7 +23,7 @@ nacos: discovery: # 服务注册地址 server-addr: 192.168.110.169:8848 server-addr: 127.0.0.1:8848 service: ${spring.application.name} group: DEFAULT_GROUP namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb @@ -31,7 +31,7 @@ password: nacos config: # 配置中心地址 server-addr: 192.168.110.169:8848 server-addr: 127.0.0.1:8848 namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP name: ${spring.application.name} @@ -56,7 +56,7 @@ type: nacos nacos: # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties @@ -74,7 +74,7 @@ nacos: application: seata-server # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos @@ -89,7 +89,7 @@ nacos: discovery: # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java
@@ -67,20 +67,32 @@ @RequiresPermissions(value = {"/activity/select"}, logical = Logical.OR) @GetMapping("/getInfo") @ApiOperation(tags = {"管理后台-活动管理","小程序-个人中心-活动列表"},value = "活动查看详情") @ApiOperation(tags = {"管理后台-活动管理"},value = "活动查看详情") public AjaxResult<TActivity> getInfo(Integer id) { return AjaxResult.ok(activityService.getById(id)); } @GetMapping("/getInfo1") @ApiOperation(tags = {"小程序-个人中心-活动列表"},value = "活动查看详情") public AjaxResult<TActivity> getInfo1(Integer id) { return AjaxResult.ok(activityService.getById(id)); } @ApiOperation(tags = {"管理后台-活动管理","小程序-个人中心-活动列表"},value = "活动列表分页查询") @ApiOperation(tags = {"管理后台-活动管理"},value = "活动列表分页查询") @RequiresPermissions(value = {"/activity/list"}, logical = Logical.OR) @PostMapping(value = "/pageList") public AjaxResult<PageInfo<TActivity>> pageList(@RequestBody AdvertisingDTO dto) { return AjaxResult.ok(activityService.pageList(dto)); } @ApiOperation(tags = {"小程序-个人中心-活动列表"},value = "活动列表分页查询") @PostMapping(value = "/pageList1") public AjaxResult<PageInfo<TActivity>> pageList1(@RequestBody AdvertisingDTO dto) { return AjaxResult.ok(activityService.pageList(dto)); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
@@ -73,11 +73,14 @@ @RequiresPermissions(value = {"/IntegralSetting"}, logical = Logical.OR) @GetMapping("/getSet") @ApiOperation(tags = {"管理后台-积分管理","小程序-个人中心-签到"},value = "获取积分设置") @ApiOperation(tags = {"管理后台-积分管理"},value = "获取积分设置") public R<TIntegralRule> getSet() { TIntegralRule res = integralRuleService.getOne(new QueryWrapper<>()); return R.ok(res); } @GetMapping("/getSet1") @ApiOperation(tags = {"小程序-个人中心-签到"},value = "获取积分设置") public R<TIntegralRule> getSet1() { ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
@@ -37,7 +37,7 @@ * 查看系统设置 */ @RequiresPermissions(value = {"/customerServiceInformation", "/systemContentSetting"}, logical = Logical.OR) @ApiOperation(tags = {"小程序-系统设置","后台-内容设置"},value = "联系客服,查询设置") @ApiOperation(tags = {"后台-内容设置"},value = "联系客服,查询设置") @GetMapping(value = "/getDetailById") public AjaxResult<TSystemConfiguration> getDetailById(@RequestParam("type")@ApiParam(value = "1=客服信息,2=系统设置") Integer type) { return AjaxResult.ok(systemConfigurationService.getOne(Wrappers.lambdaQuery(TSystemConfiguration.class) @@ -45,6 +45,17 @@ } /** * 查看系统设置 */ @ApiOperation(tags = {"小程序-系统设置"},value = "联系客服,查询设置") @GetMapping(value = "/getDetailById1") public AjaxResult<TSystemConfiguration> getDetailById1(@RequestParam("type")@ApiParam(value = "1=客服信息,2=系统设置") Integer type) { return AjaxResult.ok(systemConfigurationService.getOne(Wrappers.lambdaQuery(TSystemConfiguration.class) .eq(TSystemConfiguration::getType, type))); } @RequiresPermissions(value = {"/customerServiceInformation", "/systemContentSetting"}, logical = Logical.OR) @ApiOperation(tags = {"后台-内容设置"},value = "客户信息,系统内容设置") ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
@@ -89,7 +89,7 @@ nacos: discovery: # 开发环境 # server-addr: 127.0.0.1:8848 # nacos注册中心地址 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml
@@ -19,7 +19,7 @@ nacos: discovery: # 服务注册地址 server-addr: 192.168.110.169:8848 server-addr: 127.0.0.1:8848 service: ${spring.application.name} group: DEFAULT_GROUP namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb @@ -27,7 +27,7 @@ password: nacos config: # 配置中心地址 server-addr: 192.168.110.169:8848 server-addr: 127.0.0.1:8848 namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP name: ${spring.application.name} @@ -54,7 +54,7 @@ type: nacos nacos: # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties @@ -72,7 +72,7 @@ nacos: application: seata-server # 开发环境 # server-addr: 192.168.110.169:8848 # server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos @@ -87,7 +87,7 @@ nacos: discovery: # 开发环境 # server-addr: 192.168.110.169:8848 # nacos注册中心地址 # server-addr: 127.0.0.1:8848 # nacos注册中心地址 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称