无关风月
2025-01-07 030eb0ac289f56be371d89646208e2e366ea440f
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile
25个文件已修改
1个文件已添加
991 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 587 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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){
@@ -555,6 +555,59 @@
    }
    @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")
    public R<TAppUserIntegralChange> pointsDetail(String id) {
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
@@ -778,6 +778,13 @@
        log.info("-------------------停止充电返回账单后计算费用及修改业务状态-------------------:" + vo);
        chargingOrderService.endChargeBillingCharge(vo);
    }
//    @PostMapping("/endChargeBillingCharge1")
//    public void endChargeBillingCharge1(@RequestBody TransactionRecordMessageVO vo){
//        log.info("-------------------停止充电返回账单后计算费用及修改业务状态-------------------:" + vo);
//        chargingOrderService.endChargeBillingCharge1(vo);
//    }
    
    
    
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,9 +1928,96 @@
        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();
            try {
                AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
                //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
                Object invoke = null;
@@ -1958,53 +2045,17 @@
                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);
            }
        }
        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));
    }
    
    
    @ApiOperation(tags = {"管理后台-活动管理","小程序-个人中心-活动列表"},value = "活动列表分页查询")
    @GetMapping("/getInfo1")
    @ApiOperation(tags = {"小程序-个人中心-活动列表"},value = "活动查看详情")
    public AjaxResult<TActivity> getInfo1(Integer id) {
        return AjaxResult.ok(activityService.getById(id));
    }
    @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 名称