diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java index 418282eb4..53eaacc32 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java @@ -1053,4 +1053,26 @@ public class TempController extends BaseController { return response; } + + /** + * 单个会员批量绑定车牌号 + */ + @PostMapping("/batchBindCarNumber") + public RestApiResponse batchBindCarNumber(@RequestBody CarNumberBindDTO dto) { + logger.info("单个会员批量绑定车牌号, param:{}", JSON.toJSONString(dto)); + RestApiResponse response; + try { + tempService.batchBindCarNumber(dto); + response = new RestApiResponse<>(); + } catch (BusinessException e) { + logger.warn("单个会员批量绑定车牌号 warn", e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("单个会员批量绑定车牌号 error", e); + response = new RestApiResponse<>("00300002", "单个会员批量绑定车牌号异常"); + } + logger.info("单个会员批量绑定车牌号, result:{}", JSON.toJSONString(response)); + return response; + } + } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index 0975d0a22..3fa95bf16 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -142,6 +142,9 @@ public class TempService { @Autowired private OrderService orderService; + @Autowired + private MemberService memberService; + /** * 计算订单耗电量 * 内蒙古站点 @@ -1528,5 +1531,32 @@ public class TempService { } } + public void batchBindCarNumber(CarNumberBindDTO dto) { + if (dto == null || dto.getCarNumberList() == null || dto.getCarNumberList().isEmpty()) { + throw new RuntimeException("请添加要绑定的车牌号"); + } + if (dto.getVinList() == null || dto.getVinList().isEmpty()) { + throw new RuntimeException("请添加要绑定的vin码"); + } + if (StringUtils.isBlank(dto.getMemberId())) { + throw new RuntimeException("请添加要绑定的用户ID"); + } + if (StringUtils.isBlank(dto.getPhoneNumber())) { + throw new RuntimeException("请添加要绑定的手机号"); + } + if (dto.getCarNumberList().size() != dto.getVinList().size()){ + throw new RuntimeException("车牌号应与车架号对应"); + } + for (int i = 0 ; i < dto.getCarNumberList().size() ; i++) { + BindingCarNoDTO build = BindingCarNoDTO.builder() + .phoneNumber(dto.getPhoneNumber()) + .carNo(dto.getCarNumberList().get(i)) + .vinCode(dto.getVinList().get(i)) + .memberId(dto.getMemberId()) + .build(); + memberService.memberBindingCarNo(build); + } + + } } diff --git a/jsowell-admin/src/main/resources/application-dev.yml b/jsowell-admin/src/main/resources/application-dev.yml index 8a61eb3a9..e5ecb7476 100644 --- a/jsowell-admin/src/main/resources/application-dev.yml +++ b/jsowell-admin/src/main/resources/application-dev.yml @@ -263,6 +263,7 @@ batteryChargeReport: getTaskIdApi: /api/docking/api/evaluate apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + mfrID: mfr8944567890598756 # dubbo配置 dubbo: diff --git a/jsowell-admin/src/main/resources/application-prd.yml b/jsowell-admin/src/main/resources/application-prd.yml index 5b4c6be6e..669e2e1b4 100644 --- a/jsowell-admin/src/main/resources/application-prd.yml +++ b/jsowell-admin/src/main/resources/application-prd.yml @@ -258,6 +258,7 @@ batteryChargeReport: getTaskIdApi: /api/docking/api/evaluate apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + mfrID: mfr8944567890598756 # dubbo配置 dubbo: diff --git a/jsowell-admin/src/main/resources/application-pre.yml b/jsowell-admin/src/main/resources/application-pre.yml index b095c0754..53d67a247 100644 --- a/jsowell-admin/src/main/resources/application-pre.yml +++ b/jsowell-admin/src/main/resources/application-pre.yml @@ -281,6 +281,7 @@ batteryChargeReport: getTaskIdApi: /api/docking/api/evaluate apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + mfrID: mfr8944567890598756 # dubbo配置 dubbo: @@ -292,7 +293,7 @@ dubbo: parameters: namespace: c95d1cb4-8d46-48b5-9982-a6942c28e953 username: nacos - password: nacos + password: CbhuW7pG protocol: name: dubbo port: -1 diff --git a/jsowell-admin/src/main/resources/application-sit.yml b/jsowell-admin/src/main/resources/application-sit.yml index c0dabc328..fc31b5fd2 100644 --- a/jsowell-admin/src/main/resources/application-sit.yml +++ b/jsowell-admin/src/main/resources/application-sit.yml @@ -290,6 +290,7 @@ batteryChargeReport: getTaskIdApi: /api/docking/api/evaluate apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + mfrID: mfr8944567890598756 # dubbo配置 dubbo: diff --git a/jsowell-admin/src/main/resources/application.yml b/jsowell-admin/src/main/resources/application.yml index 06f4ea47f..7f073a6e6 100644 --- a/jsowell-admin/src/main/resources/application.yml +++ b/jsowell-admin/src/main/resources/application.yml @@ -157,6 +157,7 @@ batteryChargeReport: getTaskIdApi: /api/docking/api/evaluate apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + mfrID: mfr8944567890598756 # sms4j sms: diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/BindingCarNoDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/BindingCarNoDTO.java index 4eba85bcd..a84dff597 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/BindingCarNoDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/BindingCarNoDTO.java @@ -1,5 +1,6 @@ package com.jsowell.pile.dto; +import lombok.Builder; import lombok.Data; import java.util.List; @@ -11,6 +12,7 @@ import java.util.List; * @date 2023/3/4 11:39 */ @Data +@Builder public class BindingCarNoDTO { private String id; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/CarNumberBindDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CarNumberBindDTO.java new file mode 100644 index 000000000..9a1960335 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CarNumberBindDTO.java @@ -0,0 +1,36 @@ +package com.jsowell.pile.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CarNumberBindDTO { + + /** + * 手机号 + */ + private String phoneNumber; + + /** + * 会员ID + */ + private String memberId; + + /** + * 车牌号列表 + */ + private List carNumberList; + + /** + * vin列表 + */ + private List vinList; + +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index a80e054e4..a8ef3fc5f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -5724,7 +5724,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { vo.setStartChargeTime(orderVO.getStartTime()); vo.setEndChargeTime(orderVO.getEndTime()); vo.setReason(orderVO.getReason()); - vo.setSettleTime(orderVO.getSettlemetTime()); + vo.setSettleTime(orderVO.getSettlementTime()); vo.setPayTime(orderVO.getPayTime()); vo.setOrderCode(orderVO.getOrderCode()); vo.setStartMode(orderVO.getStartMode()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index f9c8718c2..6b5c8181f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -964,10 +964,10 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal electricityAmountDiscount = BigDecimal.ZERO; // 服务费折扣金额 初始值为0 BigDecimal serviceAmountDiscount = BigDecimal.ZERO; - // 优惠后电费金额 初始值为优惠前金额 - BigDecimal afterDiscountElectricityAmount = new BigDecimal(originalTotalElectricityAmount.toString()); - // 优惠后服务费金额 初始值为优惠前金额 - BigDecimal afterDiscountServiceAmount = new BigDecimal(originalTotalServiceAmount.toString()); + // 优惠后电费金额 初始值为0 + BigDecimal afterDiscountElectricityAmount = BigDecimal.ZERO; + // 优惠后服务费金额 初始值为0 + BigDecimal afterDiscountServiceAmount = BigDecimal.ZERO; // 订单总耗电量 BigDecimal totalUsedElectricity = orderDetail.getTotalUsedElectricity(); @@ -988,8 +988,8 @@ public abstract class AbstractProgramLogic implements InitializingBean { MemberDiscountVO memberDiscountVO = memberGroupService.queryMemberDiscountV2(merchantId, stationId, memberId); if (memberDiscountVO == null) { // 如果没有优惠,则优惠后金额 等于优惠前金额 - afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount(); - afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); + afterDiscountElectricityAmount = originalTotalElectricityAmount; + afterDiscountServiceAmount = originalTotalServiceAmount; } else { // 集团会员的订单,记录集团编号 orderBasicInfo.setGroupCode(memberDiscountVO.getGroupCode()); @@ -1076,6 +1076,22 @@ public abstract class AbstractProgramLogic implements InitializingBean { afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount); } + // 如果4个时段都是0,并且总耗电量大于0,则折扣后电费等于原始电费,折扣后服务费等于原始服务费 + // if (peakUsedElectricity.compareTo(BigDecimal.ZERO) == 0 + // && flatUsedElectricity.compareTo(BigDecimal.ZERO) == 0 + // && valleyUsedElectricity.compareTo(BigDecimal.ZERO) == 0 + // && sharpUsedElectricity.compareTo(BigDecimal.ZERO) == 0 + // && totalUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { + // afterDiscountElectricityAmount = originalTotalElectricityAmount; + // afterDiscountServiceAmount = originalTotalServiceAmount; + // } + + // 如果总耗电量大于0, 并且各个时段耗电量总和为0, 则优惠后金额等于优惠前金额 + if (totalUsedElectricity.compareTo(BigDecimal.ZERO) > 0 && sumUsedElectricity.compareTo(BigDecimal.ZERO) == 0 ) { + afterDiscountElectricityAmount = originalTotalElectricityAmount; + afterDiscountServiceAmount = originalTotalServiceAmount; + } + // 计算优惠了多少钱 // 电费折扣金额 = 优惠前电费 - 优惠后电费 electricityAmountDiscount = originalTotalElectricityAmount.subtract(afterDiscountElectricityAmount); @@ -1086,12 +1102,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { // orderCode, originalTotalElectricityAmount, afterDiscountElectricityAmount, electricityAmountDiscount, originalTotalServiceAmount, afterDiscountServiceAmount, serviceAmountDiscount); } - // 如果总耗电量大于0, 并且各个时段耗电量总和为0, 则优惠后金额等于优惠前金额 - if (totalUsedElectricity.compareTo(BigDecimal.ZERO) > 0 && sumUsedElectricity.compareTo(BigDecimal.ZERO) == 0 ) { - afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount(); - afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); - } - /** * 电费折扣金额和服务费折扣金额 应该大于等于0, 如小于0, 则设置为0 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/OrderVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/OrderVO.java index c52c5779b..c004052c5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/OrderVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/OrderVO.java @@ -76,7 +76,7 @@ public class OrderVO { /** * 结算时间 */ - private String settlemetTime; + private String settlementTime; /** * 结算金额(指实际产生的消费,包括本金支付,微信支付等) @@ -156,4 +156,6 @@ public class OrderVO { * 会员id */ private String memberId; + + private String phoneNumber; } diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index ffeae8c45..2f1df12e8 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3245,9 +3245,10 @@ diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java index 7db1a8735..dcf26c673 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java @@ -69,6 +69,9 @@ public class BatteryChargeReportData { private Integer bmsVoltageFault; private String gunTemp; private String singleMaxAllowVoltage; + private String readBeforeCharge; + private Integer doorStatus; + private Integer bmsChargeMode; private String beforeChargeTotalVoltage; private String readCurrentCharge; private String singleMinVoltage; diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java index 8af781be1..b9d0e6715 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java @@ -53,6 +53,9 @@ public class BatteryChargeReportService { @Value("${batteryChargeReport.token}") private String token; + @Value("${batteryChargeReport.mfrID}") + private String mfrID; + @Autowired private RedisCache redisCache; @@ -169,11 +172,14 @@ public class BatteryChargeReportService { public static void main(String[] args) { - String taskId = "1e6e42aa613947bf863bc455c2f3357e"; - String url = "https://wx.btiger.net/jeecg-boot" + "/api/docking/report/" + "web/" + taskId; - String result = HttpRequest.get(url).execute().body(); + String a = "03"; + System.out.println(String.valueOf(Integer.parseInt(a))); - System.out.println(result); + // String taskId = "1e6e42aa613947bf863bc455c2f3357e"; + // String url = "https://wx.btiger.net/jeecg-boot" + "/api/docking/report/" + "web/" + taskId; + // String result = HttpRequest.get(url).execute().body(); + // + // System.out.println(result); } /** @@ -211,25 +217,25 @@ public class BatteryChargeReportService { .collect(Collectors.toSet()); BatteryChargeReportData data = BatteryChargeReportData.builder() - .mfrID("") + .mfrID(mfrID) .siteName(stationVO.getStationName()) .siteAddress(stationVO.getAddress()) .siteLongitude(stationVO.getStationLng()) .siteLatitude(stationVO.getStationLat()) - .businessHours(stationVO.getBusinessHours()) + .businessHours(stationVO.getBusinessHours() == null ? "00:00-24:00" : stationVO.getBusinessHours()) .serviceHotline(stationVO.getStationTel()) .businessStatus(Constants.ZERO) // 营业状态 0-正常; 1-停运 .sitePileNumber(snList.size()) // 桩数量 .siteGunNumber(pileConnectorInfoVOS.size()) - .phone("") // 用户手机号码 + .phone(orderVO.getPhoneNumber()) // 用户手机号码 .siteCode(stationVO.getId()) .pileCode(orderVO.getPileSn()) .gunNo(orderVO.getConnectorCode()) .readBeforeCharge(transactionRecordsData.getAmmeterTotalStart()) .doorStatus(Constants.zero) .bmsChargeMode(Integer.parseInt(bmsDemandAndChargerOutputData.getBmsChargingModel())) - .vin(chargingHandshakeData.getVinCode()) - .batteryType(chargingHandshakeData.getBmsBatteryType()) + .vin(transactionRecordsData.getVinCode()) + .batteryType(String.valueOf(Integer.parseInt(chargingHandshakeData.getBmsBatteryType()))) .nominalEnergy(new BigDecimal(parameterConfigData.getBmsSumEnergy()).toBigInteger().toString()) .ratedCapacity(new BigDecimal(parameterConfigData.getBmsSumEnergy()).toBigInteger().toString()) .ratedVoltage(chargingHandshakeData.getBmsBatteryVoltage()) @@ -240,7 +246,7 @@ public class BatteryChargeReportService { .totalChargeTime(Math.toIntExact(chargingTime)) .remainChargeTime(Constants.zero) .totalCharge(orderVO.getTotalPower()) - .alarmCode(Constants.ZERO) + .alarmCode(Constants.DOUBLE_ZERO) .bmsVersion("V1.1") .build(); @@ -390,6 +396,9 @@ public class BatteryChargeReportService { chargeData.setCurrentSoc(new BigDecimal(realTimeData_0x23.getSoc()).intValue()); chargeData.setSocStatus(new BigDecimal(realTimeData_0x23.getSoc()).intValue()); } + chargeData.setReadBeforeCharge(transactionRecordsData.getAmmeterTotalStart()); + chargeData.setDoorStatus(Constants.zero); + chargeData.setBmsChargeMode(Constants.two); chargeData.setDcv(new BigDecimal(realTimeData_0x23.getPileVoltageOutput()).toBigInteger().toString()); chargeData.setDca(new BigDecimal(realTimeData_0x23.getPileCurrentOutput()).toBigInteger().toString()); chargeData.setMeasuringChargeVoltage(new BigDecimal(realTimeData_0x23.getBmsChargingVoltage()).toBigInteger().toString()); @@ -426,10 +435,10 @@ public class BatteryChargeReportService { chargeData.setSingleMaxTemp(realTimeData_0x25.getBmsMaxBatteryTemperature()); chargeData.setSingleMinTemp(realTimeData_0x25.getMinBatteryTemperature()); chargeData.setMaxSingleVoltageNum(Integer.parseInt(realTimeData_0x25.getBmsMaxVoltageNum())); - chargeData.setMaxSingleVoltageGroupNum(Integer.parseInt(realTimeData_0x23.getBmsMaxVoltageAndGroup().replace(".", ""))); + chargeData.setMaxSingleVoltageGroupNum(Integer.parseInt(realTimeData_0x25.getBmsMaxVoltageNum())); chargeData.setMaxTempPointNum(Integer.parseInt(realTimeData_0x25.getMaxTemperatureDetectionNum())); chargeData.setMinTempPointNum(Integer.parseInt(realTimeData_0x25.getMinTemperatureDetectionNum())); - chargeData.setBatteryInsulation(realTimeData_0x25.getBmsBatteryInsulationStatus()); + chargeData.setBatteryInsulation(Constants.DOUBLE_ZERO); // detailInfo.setVentTemp(); // detailInfo.setEnvironmentTemp();