ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
@@ -36,6 +36,10 @@ @ApiModelProperty(value = "用户id") @TableField("app_user_id") private Long appUserId; @ApiModelProperty(value = "订单标题") @TableField("title") private String title; @ApiModelProperty(value = "停车场名称") @TableField("name") ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java
@@ -124,7 +124,7 @@ } @Override public R<String> setupBillingModel1(String deviceId) { public R<String> setupBillingModel1(String deviceId, String json) { return R.fail("远程更新硬件:" + throwable.getMessage()); } }; ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java
@@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; /** * 充电服务 * @author ruoyi @@ -176,7 +178,7 @@ public R<String> platformRemoteUpdate(@RequestBody PlatformRemoteUpdate platformRemoteUpdate); @PostMapping("/iot/setupBillingModel") public R<String> setupBillingModel1(@RequestParam("deviceId") String deviceId); public R<String> setupBillingModel1(@RequestParam("deviceId") String deviceId, @RequestParam("json") String json); ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -6,4 +6,5 @@ com.ruoyi.integration.api.factory.PlatformStopChargingReplyFallbackFactory com.ruoyi.integration.api.factory.SwitchwayGateFallbackFactory com.ruoyi.integration.api.factory.IotInterfaceFallbackFactory com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory com.ruoyi.integration.api.factory.BmsDemandAndChargerExportationFallbackFactory ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -34,7 +34,9 @@ @ApiModelProperty(value = "序号") @TableField(exist = false) private Integer xuhao; @ApiModelProperty(value = "退款描述") @TableField(exist = false) private String refundContent; @ApiModelProperty(value = "订单编号") @TableField("code") private String code; @@ -206,6 +208,9 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("refund_time") private LocalDateTime refundTime; @ApiModelProperty(value = "退款成功时间") @TableField(exist = false) private String refundTime1; @ApiModelProperty(value = "总电量") @TableField("total_electricity") private BigDecimal totalElectricity; @@ -232,6 +237,9 @@ @ApiModelProperty(value = "支付方式") @TableField(exist = false) private String rechargePaymentType1; @ApiModelProperty(value = "支付平台") @TableField(exist = false) private String payPlatform; @ApiModelProperty(value = "充电启动方式") @TableField(exist = false) private String chargingType; @@ -244,6 +252,9 @@ @ApiModelProperty(value = "充电费用") @TableField(exist = false) private String totalAmount; @ApiModelProperty(value = "合计") @TableField(exist = false) private BigDecimal total; @ApiModelProperty(value = "优惠抵扣") @TableField(exist = false) private String discount; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java
@@ -40,6 +40,7 @@ @TableField("refund_code") private String refundCode; @ApiModelProperty(value = "退款金额") @TableField("refund_amount") private BigDecimal refundAmount; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -101,6 +101,12 @@ @ApiModelProperty(value = "承担金额") @TableField("proportion_money") private BigDecimal proportionMoney; @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例") @TableField(exist = false) private String proportionPartnerString; @ApiModelProperty(value = "平台充电服务费根据合同约定分成比例") @TableField(exist = false) private String proportionMoneyString; @ApiModelProperty(value = "本期结算电费总金额 (实际电费转账)") @TableField("total_electronic") private BigDecimal totalElectronic; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java
@@ -2,6 +2,7 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TChargingBill; import com.ruoyi.order.api.model.TChargingOrder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -27,5 +28,7 @@ private BigDecimal sharingAmount; @ApiModelProperty(value = "列表数据") private PageInfo<ChargingBillListVO> list; @ApiModelProperty(value = "导出数据") private List<TChargingOrder> orderList; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
@@ -17,6 +17,8 @@ @ApiModelProperty(value = "订单状态") private Integer status; @ApiModelProperty(value = "充值支付方式(1=微信,2=支付宝)") private Integer rechargePaymentType; @ApiModelProperty(value = "充值支付状态(1=待支付,2=已支付)") private Integer rechargePaymentStatus; @ApiModelProperty(value = "电站id") ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -137,11 +137,11 @@ BigDecimal vipElectrovalence = data.getVipElectrovalence(); // 计算预付金额能充多少度普通电 BigDecimal divide1 = money.divide(electrovalence, 2, BigDecimal.ROUND_HALF_UP); // 计算冲会员电能充多少度会员电 BigDecimal divide = money.divide(vipElectrovalence, 2, BigDecimal.ROUND_HALF_UP); BigDecimal subtract = divide.subtract(divide1); // 计算冲会员充电需要多少钱 BigDecimal vipMoney = divide1.multiply(vipElectrovalence).setScale(2,BigDecimal.ROUND_HALF_UP); // BigDecimal subtract = divide.subtract(divide1); // 优惠金额 data.setMoney(subtract.multiply(electrovalence.subtract(vipElectrovalence)).setScale(2, BigDecimal.ROUND_HALF_UP)); data.setMoney(electrovalence.multiply(divide1).subtract(vipMoney).setScale(2, BigDecimal.ROUND_DOWN)); return AjaxResult.ok(data); } /** ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java
@@ -55,21 +55,24 @@ getAppUserVipDetail.setVipId(user.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); // 查询邀请用户获得积分配置 TIntegralRule integralRule = integralRuleClient.getSet().getData(); JSONObject jsonObject = JSONObject.parseObject(integralRule.getInviteUsersToEarnPoints()); TInviteUser inviteUser = new TInviteUser(); inviteUser.setAppUserId(beInvitedAppUserId); inviteUser.setBeInvitedAppUserId(appUserId); inviteUser.setCreateTime(LocalDateTime.now()); if(Objects.nonNull(vip) && vip.getDoubleIntegration() == 1){ inviteUser.setAward(jsonObject.getInteger("num1")*2); if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getDoubleIntegration() == 1){ inviteUser.setAward(jsonObject.getInteger("num1")*2); }else { inviteUser.setAward(jsonObject.getInteger("num1")); } }else { inviteUser.setAward(jsonObject.getInteger("num1")); } inviteUser.setAppUserId(beInvitedAppUserId); inviteUser.setBeInvitedAppUserId(appUserId); inviteUser.setCreateTime(LocalDateTime.now()); this.save(inviteUser); } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -144,6 +144,11 @@ Long userId = tokenService.getLoginUserApplet().getUserId(); // 根据id查询用户信息 TAppUser appUser = appUserClient.getUserById(userId).getData(); if(Objects.nonNull(byId1.getDiscount())){ siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); }else { siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); } if(Objects.nonNull(appUser)){ // TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); @@ -151,15 +156,13 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); }else { siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); } } }else { siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); } } } @@ -192,6 +195,11 @@ Long userId = tokenService.getLoginUserApplet().getUserId(); // 根据id查询用户信息 TAppUser appUser = appUserClient.getUserById(userId).getData(); if(Objects.nonNull(byId1.getDiscount())){ siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); }else { siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); } if(Objects.nonNull(appUser)){ // TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); @@ -199,15 +207,13 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); }else{ siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); } } }else { siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); } } } @@ -405,8 +411,9 @@ @ApiOperation(value = "获取站点列表", tags = {"小程序-站点管理-地图导航站点"}) @PostMapping("/getMapSiteList") public AjaxResult<List<SiteVO>> getMapSiteList(@Validated @RequestBody SiteQuery query){ return AjaxResult.success(siteService.getMapSiteList(query)); public AjaxResult<List<SiteVO>> getMapSiteList(@Validated @RequestBody SiteQuery query, HttpServletRequest request){ int isLogin = StringUtils.isEmpty(SecurityUtils.getToken(request)) ? 0 : 1; return AjaxResult.success(siteService.getMapSiteList(query,isLogin)); } @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理-站点详情"}) @PostMapping("/getDetailById") ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -1,6 +1,8 @@ package com.ruoyi.chargingPile.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.chargingPile.api.dto.TAccountingStrategyDTO; @@ -90,7 +92,7 @@ @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理", "管理后台-充电桩信息"},value = "查询计费策略明细列表") @GetMapping(value = "/queryAccountingStrategyDetailByStrategyId") public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailByStrategyId(@RequestParam("strategyId") Integer strategyId) { List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryAccountingStrategyDetailByStrategyId(strategyId); List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryMangementAccountingStrategyDetailByStrategyId(strategyId); list.forEach(detail -> { detail.setTotalPrice(detail.getElectrovalence().add(detail.getServiceCharge())); }); @@ -119,16 +121,16 @@ Long userId = SecurityUtils.getLoginUser().getUserid(); dto.setUserId(userId); accountingStrategyService.save(dto); // 添加明细 dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId())); accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails()); if(null != dto.getSiteId()){ //下发硬件数据 List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list(); for (TChargingPile tChargingPile : list) { integrationClient.setupBillingModel1(tChargingPile.getCode()); integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails())); } } // 添加明细 dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId())); accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails()); return AjaxResult.ok(dto.getId()); } @@ -202,7 +204,7 @@ //下发硬件数据 List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list(); for (TChargingPile tChargingPile : list) { integrationClient.setupBillingModel1(tChargingPile.getCode()); integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails())); } } return AjaxResult.success(); @@ -270,8 +272,9 @@ String twoUserName = sysUserClient.getSysUser(accountingStrategy.getTwoUserId()).getData().getNickName(); accountingStrategyVO.setTwoUserName(twoUserName); } if(null != children.getUserId()){ String userName = sysUserClient.getSysUser(children.getUserId()).getData().getNickName(); TAccountingStrategy accountingStrategy1 = accountingStrategyService.getById(id); if(null != accountingStrategy1.getUserId()){ String userName = sysUserClient.getSysUser(accountingStrategy1.getUserId()).getData().getNickName(); accountingStrategyVO.setUserName(userName); } accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) @@ -379,9 +382,11 @@ accountingStrategyService.removeById(one.getId()); } //硬件 List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId.getId())); List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, byId.getSiteId()).list(); for (TChargingPile tChargingPile : list) { integrationClient.setupBillingModel1(tChargingPile.getCode()); integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); } } }else { ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -101,6 +101,7 @@ @Resource private AppUserCarClient appUserCarClient; @Autowired public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) { this.applyChargingPileService = applyChargingPileService; @@ -269,10 +270,10 @@ @ApiOperation(value = "下载-已出账", tags = {"管理后台-充电算账单"}) @PutMapping("/downloadBill") @Log(title = "【充电算账单】下载算账单", businessType = BusinessType.EXPORT) public R downloadBill(@RequestBody ExportUidDto uid, HttpServletResponse response) public R downloadBill(@RequestBody String uid, HttpServletResponse response) { ChargingListQuery chargingListQuery = new ChargingListQuery(); chargingListQuery.setUid(uid.getUid()); chargingListQuery.setUid(uid); chargingListQuery.setPageCurr(1); chargingListQuery.setPageSize(99999); ChargingBillVO data = chargingOrderClient.chargingBillListR(chargingListQuery).getData(); @@ -314,6 +315,28 @@ { dto.setPageCurr(1); dto.setPageSize(99999999); AccountListVO data = orderClient.accountBillList(dto).getData(); List<TChargingOrder> collect = data.getOrderList().stream().distinct().collect(Collectors.toList()); int i = 1; BigDecimal bigDecimal = new BigDecimal("0"); for (TChargingOrder chargingOrder : collect) { bigDecimal = bigDecimal.add(chargingOrder.getPaymentAmount()); if (chargingOrder.getRechargePaymentType()!=null){ switch (chargingOrder.getRechargePaymentType()){ case 1: chargingOrder.setPayPlatform("微信"); chargingOrder.setRechargePaymentType1("微信小程序支付"); break; case 2: chargingOrder.setPayPlatform("支付宝"); chargingOrder.setRechargePaymentType1("支付宝小程序支付"); break; } } chargingOrder.setXuhao(i); i++; } collect.get(0).setTotal(bigDecimal); try { response.setCharacterEncoding(Constants.UTF8); response.setContentType("application/vnd.ms-excel"); @@ -331,7 +354,7 @@ try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { WriteSheet writeSheet = EasyExcel.writerSheet().build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); excelWriter.fill(new FillWrapper("data1", data.getList().getRecords()), fillConfig, writeSheet); excelWriter.fill(new FillWrapper("data1", collect), fillConfig, writeSheet); excelWriter.finish(); } catch (Exception e) { return R.fail("excel导出失败!"); @@ -348,8 +371,6 @@ public R downloadSettlementTotal(@RequestBody ExportUidDto uid,HttpServletResponse response) { SettlementTotalVO data = chargingOrderClient.settlementTotalR(uid.getTime()).getData(); try { response.setCharacterEncoding(Constants.UTF8); response.setContentType("application/vnd.ms-excel"); @@ -524,9 +545,18 @@ if (chargingOrder.getCode()!=null){ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData(); if (data6!=null && !data6.isEmpty()){ // 第一条数据soc为开始 最后一条数据soc为结束soc settlementExportVO.setStartSoc(data6.get(0).getSoc()+"%"); settlementExportVO.setEndSoc(data6.get(data6.size()-1).getSoc()+"%"); int min = 100; int max = 0; for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) { if (uploadRealTimeMonitoringData.getSoc()>max){ max = uploadRealTimeMonitoringData.getSoc(); } if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){ min = uploadRealTimeMonitoringData.getSoc(); } } settlementExportVO.setEndSoc(max+""); settlementExportVO.setStartSoc(min+""); } } settlementExportVO.setIsSoc("否"); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -232,6 +232,9 @@ } TChargingGun tChargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getFullNumber, (pile_code + gun_code)).eq(TChargingGun::getDelFlag, 0)); if(null != tChargingGun){ charging_pile_online.put(tChargingGun.getFullNumber(), System.currentTimeMillis()); redisService.setCacheMap("charging_gun_online", charging_pile_online); TChargingPile chargingPile = chargingPileService.getById(tChargingGun.getChargingPileId()); //枪处于离线或者故障,返回状态为正常,则修改其状态 if(0 == status && tChargingGun.getStatus() != 2){ @@ -281,11 +284,6 @@ faultMessage.setContent("设备故障"); faultMessageService.save(faultMessage); } if(1 != status){ charging_pile_online.put(tChargingGun.getFullNumber(), System.currentTimeMillis()); redisService.setCacheMap("charging_gun_online", charging_pile_online); } if(2 == status){ TChargingOrderVo order = new TChargingOrderVo(); order.setChargingPileId(tChargingGun.getChargingPileId()); @@ -312,6 +310,13 @@ tChargingGun1.setStatus(3); chargingGunService.updateById(tChargingGun1); } List<TFaultMessage> list = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingGunId, tChargingGun.getId()) .isNull(TFaultMessage::getEndTime)); if(!list.isEmpty()){ list.forEach(s->s.setEndTime(LocalDateTime.now())); faultMessageService.updateBatchById(list); } } } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -204,7 +204,7 @@ List<Map<String, Object>> charMap = new ArrayList<>(); // 生成从 "00:00" 到 "23:00" 的时间数据 // 生成从 "00:00" 到 "23:00" 的时间数据------- for (int hour = 0; hour < 24; hour++) { String time = String.format("%02d:00", hour); Map<String, Object> mapWithTimeValue = findMapWithTimeValue(maps, time); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
@@ -96,5 +96,5 @@ * @param query * @return */ List<SiteVO> getMapSiteList(SiteQuery query); List<SiteVO> getMapSiteList(SiteQuery query,Integer isLogin); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java
@@ -23,6 +23,12 @@ * @return */ List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId); /** * 查询计费策略明细列表---后台 * @param strategyId * @return */ List<TAccountingStrategyDetailVO> queryMangementAccountingStrategyDetailByStrategyId(Integer strategyId); /** ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -9,10 +9,7 @@ import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.api.vo.GetAppUserVipDetail; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TParkingLot; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteDetailQuery; import com.ruoyi.chargingPile.api.query.SiteQuery; @@ -87,6 +84,9 @@ private IntegrationClient integrationClient; @Resource private AppUserVipDetailClient vipDetailClient; @Resource private TAccountingStrategyDetailService accountingStrategyDetailService; /** @@ -293,29 +293,32 @@ public PageInfo<SiteVO> pageList(SiteQuery query,Integer isLogin) { TAppUser appUser = null; // 获取当前登录用户id Long userId = tokenService.getLoginUserApplet().getUserId(); TAppUserVipDetail data1 = null; if(isLogin == 1){ Long userId = tokenService.getLoginUserApplet().getUserId(); // 根据id查询用户信息 appUser = appUserClient.getUserById(userId).getData(); GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); getAppUserVipDetail.setAppUserId(userId); getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); data1 = appUserVipDetail.getData(); } PageInfo<SiteVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); List<SiteVO> list = this.baseMapper.pageList(query,pageInfo); if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){ // 查询会员信息 // TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); getAppUserVipDetail.setAppUserId(userId); getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ list.forEach(item -> { if(Objects.nonNull(vip.getDiscount())){ item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); } }); if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ list.forEach(item -> { if(Objects.nonNull(vip.getDiscount())){ item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); } }); } } } pageInfo.setRecords(list); @@ -386,31 +389,36 @@ } @Override public List<SiteVO> getMapSiteList(SiteQuery query) { public List<SiteVO> getMapSiteList(SiteQuery query,Integer isLogin) { if(StringUtils.isEmpty(query.getLon()) || StringUtils.isEmpty(query.getLat())){ return new ArrayList<>(); } TAppUser appUser = null; // 获取当前登录用户id Long userId = tokenService.getLoginUserApplet().getUserId(); // 根据id查询用户信息 TAppUser appUser = appUserClient.getUserById(userId).getData(); List<SiteVO> list = this.baseMapper.getMapSiteList(query); if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){ // 查询会员信息 // TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); TAppUserVipDetail data1 = null; if(isLogin == 1){ Long userId = tokenService.getLoginUserApplet().getUserId(); // 根据id查询用户信息 appUser = appUserClient.getUserById(userId).getData(); GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); getAppUserVipDetail.setAppUserId(userId); getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ list.forEach(item -> { item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); }); data1 = appUserVipDetail.getData(); } List<SiteVO> list = this.baseMapper.getMapSiteList(query); if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){ // 查询会员信息 // TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ list.forEach(item -> { item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); }); } } } return list; @@ -430,14 +438,17 @@ this.updateById(site); List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, id).eq(TChargingGun::getDelFlag, 0)); for (TChargingGun tChargingGun : list) { tChargingGun.setAccountingStrategyId(accountingStrategyId); TChargingGun tChargingGun1 = new TChargingGun(); tChargingGun1.setId(tChargingGun.getId()); tChargingGun1.setAccountingStrategyId(accountingStrategyId); chargingGunService.updateById(tChargingGun1); } chargingGunService.updateBatchById(list); //下发硬件数据 List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId)); List<TChargingPile> list1 = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, id).eq(TChargingPile::getDelFlag, 0).list(); for (TChargingPile tChargingPile : list1) { integrationClient.setupBillingModel1(tChargingPile.getCode()); integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); } } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -61,6 +61,28 @@ private AppUserVipDetailClient vipDetailClient; @Override public List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId) { List<TAccountingStrategyDetailVO> tAccountingStrategyDetailVOS = this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId); Long userId = tokenService.getLoginUserApplet().getUserId(); TAppUser appUser = appUserClient.getUserById(userId).getData(); for (TAccountingStrategyDetailVO tAccountingStrategyDetailVO : tAccountingStrategyDetailVOS) { GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); getAppUserVipDetail.setAppUserId(userId); getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); if(Objects.nonNull(vip) && vip.getType() == 2){ tAccountingStrategyDetailVO.setDiscount(vip.getDiscount().divide(new BigDecimal(10))); } } } return tAccountingStrategyDetailVOS; } @Override public List<TAccountingStrategyDetailVO> queryMangementAccountingStrategyDetailByStrategyId(Integer strategyId) { return this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId); } @@ -86,8 +108,11 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); String vipJson = data1.getVipJson(); TVip vip = JSON.parseObject(vipJson, TVip.class); TVip vip = null; if(Objects.nonNull(data1)){ String vipJson = data1.getVipJson(); vip = JSON.parseObject(vipJson, TVip.class); } TAccountingStrategyDetailVO accountingStrategyDetailVO; TAccountingStrategyDetailVO accountingStrategyDetailNext; @@ -102,6 +127,7 @@ if(Objects.nonNull(vip)) { if (vip.getType() == 2) { accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount()))); accountingStrategyDetailVO.setDiscount(vip.getDiscount().divide(new BigDecimal(10))); accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount()))); } else { if(Objects.isNull(accountingStrategy.getDiscount())){ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -1,15 +1,13 @@ package com.ruoyi.chargingPile.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.AppUserCarClient; import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.chargingPile.api.query.BatchSetAccountingStrategy; import com.ruoyi.chargingPile.api.query.PageChargingPileList; import com.ruoyi.chargingPile.api.vo.TChargingGunVO; @@ -111,6 +109,9 @@ @Resource private IntegrationClient integrationClient; @Resource private TAccountingStrategyDetailService accountingStrategyDetailService; @@ -286,12 +287,18 @@ List<Integer> id = setAccountingStrategy.getId(); List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0)); for (TChargingGun tChargingGun : list) { tChargingGun.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId()); TChargingGun tChargingGun1 = new TChargingGun(); tChargingGun1.setId(tChargingGun.getId()); tChargingGun1.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId()); chargingGunService.updateById(tChargingGun1); } chargingGunService.updateBatchById(list); Integer accountingStrategyId = setAccountingStrategy.getAccountingStrategyId(); List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId).orderByAsc(TAccountingStrategyDetail::getStartTime)); //下发硬件更新计费模板 for (TChargingPile chargingPile : this.listByIds(id)) { integrationClient.setupBillingModel1(chargingPile.getCode()); List<TChargingPile> tChargingPiles = this.listByIds(id); for (TChargingPile chargingPile : tChargingPiles) { integrationClient.setupBillingModel1(chargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); } } ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml
@@ -105,7 +105,7 @@ </foreach> </if> <if test="null != query.name and '' != query.name"> and CONCAT(b.number, a.name) like CONCAT('%', #{query.name}, '%') and CONCAT(b.name, a.name) like CONCAT('%', #{query.name}, '%') </if> </select> </mapper> ruoyi-service/ruoyi-chargingPile/src/main/resources/template/结算汇总.xlsxBinary files differ
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/账户结算账单.xlsxBinary files differ
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsxBinary files differ
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java
@@ -33,8 +33,8 @@ */ @ResponseBody @PostMapping("/getCoupon") public BaseResponse<GetCouponResp> getCoupon(@RequestBody GetCouponReq req){ log.warn("停车获取优惠券请求参数:{}" + JSON.toJSONString(req)); public BaseResponse<GetCouponResp> getCoupon(GetCouponReq req){ log.warn("停车获取优惠券请求参数:{}", JSON.toJSONString(req)); GetCouponResp coupon = couponService.getCoupon(req); return BaseResponse.ok(coupon); } @@ -47,8 +47,8 @@ */ @ResponseBody @PostMapping("/usedCoupon") public BaseResponse usedCoupon(@RequestBody UsedCoupon req){ log.warn("停车使用优惠券请求参数:{}" + JSON.toJSONString(req)); public BaseResponse usedCoupon(UsedCoupon req){ log.warn("停车使用优惠券请求参数:{}", JSON.toJSONString(req)); couponService.usedCoupon(req); return BaseResponse.ok(); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java
@@ -28,7 +28,7 @@ @ResponseBody @PostMapping("/cloudParkingInOrder") public BaseResponse cloudParkingInOrder(@RequestBody CloudParkingOrder order){ log.warn("云停车入场请求参数:{}" + JSON.toJSONString(order)); log.warn("云停车入场请求参数:{}", JSON.toJSONString(order)); parkingOrderService.cloudParkingInOrder(order); return BaseResponse.ok(); } @@ -41,7 +41,7 @@ @ResponseBody @PostMapping("/cloudParkingOutOrder") public BaseResponse cloudParkingOutOrder(@RequestBody CloudParkingOrder order){ log.warn("云停车出场请求参数:{}" + JSON.toJSONString(order)); log.warn("云停车出场请求参数:{}", JSON.toJSONString(order)); parkingOrderService.cloudParkingOutOrder(order); return BaseResponse.ok(); } @@ -54,7 +54,7 @@ @ResponseBody @PostMapping("/cloudParkingSpace") public BaseResponse cloudParkingSpace(@RequestBody CloudParkingSpace parkingSpace){ log.warn("云停车实时车位请求参数:{}" + JSON.toJSONString(parkingSpace)); log.warn("云停车实时车位请求参数:{}", JSON.toJSONString(parkingSpace)); parkingOrderService.cloudParkingSpace(parkingSpace); return BaseResponse.ok(); } @@ -68,7 +68,7 @@ @ResponseBody @PostMapping("/offlineParkingInOrder") public BaseResponse offlineParkingInOrder(@RequestBody OfflineParkingOrder order){ log.warn("线下停车场入场请求参数:{}" + JSON.toJSONString(order)); log.warn("线下停车场入场请求参数:{}", JSON.toJSONString(order)); parkingOrderService.offlineParkingInOrder(order); OfflineParkingResponse offlineParkingResponse = new OfflineParkingResponse(); offlineParkingResponse.setCode(0); @@ -85,7 +85,7 @@ @ResponseBody @PostMapping("/offlineParkingOutOrder") public BaseResponse offlineParkingOutOrder(@RequestBody OfflineParkingOrder order){ log.warn("线下停车场出场请求参数:{}" + JSON.toJSONString(order)); log.warn("线下停车场出场请求参数:{}", JSON.toJSONString(order)); parkingOrderService.offlineParkingOutOrder(order); OfflineParkingResponse offlineParkingResponse = new OfflineParkingResponse(); offlineParkingResponse.setCode(0); @@ -102,7 +102,7 @@ @ResponseBody @PostMapping("/offlineParkingSpace") public BaseResponse offlineParkingSpace(@RequestBody OfflineParkingSpace parkingSpace){ log.warn("线下停车场实时车位请求参数:{}" + JSON.toJSONString(parkingSpace)); log.warn("线下停车场实时车位请求参数:{}", JSON.toJSONString(parkingSpace)); parkingOrderService.offlineParkingSpace(parkingSpace); return BaseResponse.ok(); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
@@ -53,8 +53,8 @@ TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData(); parkingRecord.setName(data.getName()); parkingRecord.setParkingLotId(data.getId()); LocalDateTime parse = LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ")); parse.plusDays(8); LocalDateTime parse = LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ISO_DATE_TIME); parse = parse.plusHours(8); parkingRecord.setInParkingTime(parse); parkingRecord.setStatus(1); parkingRecord.setCreateTime(LocalDateTime.now()); @@ -72,8 +72,8 @@ query.setLicensePlate(order.getPlate()); query.setStatus(1); TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData(); LocalDateTime parse = LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ")); parse.plusDays(8); LocalDateTime parse = LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ISO_DATE_TIME); parse = parse.plusHours(8); parkingRecord.setOutParkingTime(parse); parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime())); parkingRecord.setOrderAmount(new BigDecimal(order.getReceivable())); @@ -81,6 +81,8 @@ parkingRecord.setPayType(order.getPayType()); BigDecimal payment = new BigDecimal(order.getPayment()); parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3); parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1); parkingRecord.setTitle("【停车缴费】" + payment + "元"); parkingRecordClient.updateParkingRecord(parkingRecord); } @@ -108,8 +110,8 @@ TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData(); parkingRecord.setName(data.getName()); parkingRecord.setParkingLotId(data.getId()); LocalDateTime parse = LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ")); parse.plusDays(8); LocalDateTime parse = LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ISO_DATE_TIME); parse = parse.plusHours(8); parkingRecord.setInParkingTime(parse); parkingRecord.setStatus(1); parkingRecord.setCreateTime(LocalDateTime.now()); @@ -127,12 +129,16 @@ query.setLicensePlate(order.getPlatenumber()); query.setStatus(1); TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData(); LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ")); parse.plusDays(8); LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ISO_DATE_TIME); parse = parse.plusHours(8); parkingRecord.setOutParkingTime(parse); parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime())); parkingRecord.setOrderAmount(new BigDecimal(order.getMoney())); parkingRecord.setPayment(new BigDecimal(order.getMoney())); BigDecimal payment = new BigDecimal(order.getMoney()); parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3); parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1); parkingRecord.setTitle("【停车缴费】" + payment + "元"); parkingRecordClient.updateParkingRecord(parkingRecord); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -382,18 +382,17 @@ @ApiOperation(value = "计费模型设置",tags = {"硬件接口"}) @PostMapping(value = "/setupBillingModel") public R setupBillingModel(@RequestParam("deviceId") String deviceId) { public R setupBillingModel(@RequestParam("deviceId") String deviceId, @RequestParam("json") String json) { SetupBillingModel setupBillingModel = new SetupBillingModel(); List<TAccountingStrategyDetail> accountingStrategyDetails = JSON.parseArray(json, TAccountingStrategyDetail.class); // 计费模型 List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(deviceId).getData(); Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); // 价格设置 AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply(); StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); // 时段设置 StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(deviceId).getData(); acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString()); acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetails.get(0).getAccountingStrategyId().toString()); acquisitionBillingModeReply.setCharging_pile_code(deviceId); acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -74,13 +74,14 @@ ChargingBillVO res = chargingBillService.chargingBillList1(dto); List<ChargingBillListVO> records = res.getList().getRecords(); accountListVO.setBillCount(records.size()); accountListVO.setTotalAmount(res.getOrderAmount().subtract(res.getRefundAmount()) .subtract(res.getCommissionAmount()).subtract(res.getSharingAmount())); accountListVO.setPaymentAmount(res.getPaymentAmount()); accountListVO.setRefundAmount(res.getRefundAmount()); accountListVO.setCommissionAmount(res.getCommissionAmount()); accountListVO.setSharingAmount(res.getSharingAmount()); accountListVO.setTotalAmount(res.getPaymentAmount().subtract(res.getRefundAmount()) .subtract(res.getCommissionAmount().setScale(2,BigDecimal.ROUND_DOWN)).subtract(res.getSharingAmount()).setScale(2, BigDecimal.ROUND_DOWN)); accountListVO.setPaymentAmount(res.getPaymentAmount().setScale(2, BigDecimal.ROUND_DOWN)); accountListVO.setRefundAmount(res.getRefundAmount().setScale(2, BigDecimal.ROUND_DOWN)); accountListVO.setCommissionAmount(res.getCommissionAmount().setScale(2, BigDecimal.ROUND_DOWN)); accountListVO.setSharingAmount(res.getSharingAmount().setScale(2, BigDecimal.ROUND_DOWN)); accountListVO.setList(res.getList()); accountListVO.setOrderList(res.getExportList()); return R.ok(accountListVO); } @PostMapping(value = "/chargingBillList") @@ -292,7 +293,7 @@ int i =1; for (TChargingOrder tChargingOrder : tChargingOrders) { // 账单信息 paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); // 退款信息 ChargingBillRefundExport chargingBillRefundExport = new ChargingBillRefundExport(); @@ -337,7 +338,7 @@ chargingBillPayExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber()); chargingBillPayExport.setCode(tChargingOrder.getCode()); chargingBillPayExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):""); chargingBillPayExport.setPaymentAmount(tChargingOrder.getOrderAmount().toString()); chargingBillPayExport.setPaymentAmount(tChargingOrder.getChargeAmount().toString()); chargingBillPayExport.setTotal(""); chargingBillPayExports.add(chargingBillPayExport); i++; @@ -354,13 +355,11 @@ String name = data1.get(0).getName(); chargingBillExport.setSiteName(name); } } chargingBillExport.setPaymentAmount(paymentAmount); chargingBillExport.setRefundAmount(refundAmount); chargingBillExport.setIncome(paymentAmount.subtract(refundAmount)); chargingBillExports.add(chargingBillExport); // 导出 List<Map<String, Object>> sheetsList = new ArrayList<>(); for (int i1 = 1; i1 <= 3; i1++) { ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -58,6 +58,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; @@ -112,6 +113,8 @@ @ApiOperation(value = "充电时段统计-导出", tags = {"管理后台-财务结算"}) @PutMapping("/export") public void export(@RequestBody ChargingListQuery dto) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ChargingOrderTimeVO res = chargingOrderService.chargingList(dto); List<TChargingOrderExport> tChargingOrderExports = new ArrayList<>(); List<ChargingOrderListVO> exportList = res.getList().getRecords(); @@ -149,10 +152,22 @@ tChargingOrderExport.setOrderClassification("1"); tChargingOrderExport.setStartType("扫码"); tChargingOrderExport.setOne("小程序"); tChargingOrderExport.setTwo("小程序"); tChargingOrderExport.setCreateTime(chargingOrderListVO.getCreateTime()+""); tChargingOrderExport.setStartTime(chargingOrderListVO.getStartTime()+""); tChargingOrderExport.setEndTime(chargingOrderListVO.getEndTime()+""); if (chargingOrderListVO.getRechargePaymentType()!=null){ switch (chargingOrderListVO.getRechargePaymentType()){ case 1: tChargingOrderExport.setTwo("微信小程序"); break; case 2: tChargingOrderExport.setTwo("支付宝小程序"); break; } } String s1 = DateUtils.localDateTimeToString(chargingOrderListVO.getCreateTime()); String s2 = DateUtils.localDateTimeToString(chargingOrderListVO.getStartTime()); String s3 = DateUtils.localDateTimeToString(chargingOrderListVO.getEndTime()); tChargingOrderExport.setCreateTime(s1); tChargingOrderExport.setStartTime(s2); tChargingOrderExport.setEndTime(s3); tChargingOrderExport.setRechargePaymentStatus(chargingOrderListVO.getRechargePaymentStatus()+""); tChargingOrderExport.setType("充电订单"); tChargingOrderExport.setChargingType("单桩双充"); @@ -174,7 +189,7 @@ BigDecimal size = new BigDecimal(stageCost.size()); for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : stageCost) { bigDecimal1 = bigDecimal1.add(tChargingOrderAccountingStrategy.getElectrovalence()); bigDecimal1 = bigDecimal1.add(tChargingOrderAccountingStrategy.getPeriodElectricPrice()); bigDecimal2 = bigDecimal2.add(tChargingOrderAccountingStrategy.getPeriodServicePrice()); bigDecimal3 = bigDecimal3.add(tChargingOrderAccountingStrategy.getPeriodOriginalServicePrice()); } @@ -205,7 +220,6 @@ tChargingOrderExport.setVipType(data1.getName()); } } // tChargingOrderExport.setVipType(); tChargingOrderExport.setIsPlus(chargingOrderListVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0?"是":"否"); if (data3!=null){ tChargingOrderExport.setRealName(data3.getName()); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -10,6 +10,7 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.order.api.model.TChargingOrder; @@ -37,6 +38,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -77,6 +79,7 @@ } } ChargingBillVO chargingBillVO = new ChargingBillVO(); List<TChargingOrder> tChargingOrders1 = new ArrayList<>(); String startTime1 = null; String startTime2 = null; if (StringUtils.hasLength(dto.getStartTime())){ @@ -98,12 +101,8 @@ BigDecimal sharingAmountTotal = new BigDecimal("0"); BigDecimal chargingCapacityTotal = new BigDecimal("0"); BigDecimal discountTotal = new BigDecimal("0"); BigDecimal refundAmount = new BigDecimal("0"); int orderCount = 0; for (ChargingBillListVO chargingBillListVO : list) { if (chargingBillListVO.getType()==2){ continue; } String temp = ""; String temp1 = ""; switch (chargingBillListVO.getType()){ @@ -160,6 +159,7 @@ BigDecimal commissionAmount = new BigDecimal("0"); BigDecimal sharingAmount = new BigDecimal("0"); BigDecimal chargingCapacity = new BigDecimal("0"); BigDecimal refundAmount = new BigDecimal("0"); orderCount+=tChargingOrders.size(); chargingBillVO.setCategory(""); chargingBillVO.setExportList(tChargingOrders); @@ -173,6 +173,16 @@ if (data1!=null && data2!=null){ tChargingOrder.setTerminalName(data1.getName()+data2.getName()); tChargingOrder.setTerminalCode(data2.getCode()); } if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==1){ chargingBillListVO.setPayTypeName("微信商户"); } if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==2){ if (StringUtils.hasLength(chargingBillListVO.getPayTypeName())){ chargingBillListVO.setPayTypeName("微信商户+支付宝商户"); }else{ chargingBillListVO.setPayTypeName("支付宝商户"); } } tChargingOrder.setOrderClassification1("线上订单"); tChargingOrder.setRechargePaymentType1("预付"); @@ -300,19 +310,16 @@ chargingBillVO.setPaymentAmount(BigDecimal.ZERO); } chargingBillListVO.setOrderAmount(chargingBillVO.getPaymentAmount().subtract(chargingBillVO.getRefundAmount()==null?BigDecimal.ZERO:chargingBillVO.getRefundAmount())); chargingBillListVO.setPaymentAmount(paymentAmount); chargingBillListVO.setOrderAmount(orderAmount == null?BigDecimal.ZERO:orderAmount.subtract(sharingAmount).subtract(commissionAmount)); chargingBillListVO.setOrderAmount(paymentAmount == null?BigDecimal.ZERO:orderAmount.subtract(sharingAmount).subtract(commissionAmount)); chargingBillListVO.setRefundAmount(refundAmount == null?BigDecimal.ZERO:refundAmount); chargingBillListVO.setElectrovalence(electrovalence == null?BigDecimal.ZERO:electrovalence); chargingBillListVO.setServiceCharge(serviceCharge == null?BigDecimal.ZERO:serviceCharge); chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2, RoundingMode.HALF_DOWN)); chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2,BigDecimal.ROUND_DOWN)); chargingBillListVO.setSharingAmount(sharingAmount == null?BigDecimal.ZERO:sharingAmount); chargingBillListVO.setChargingCapacity(chargingCapacity == null?BigDecimal.ZERO:chargingCapacity); chargingBillListVO.setBillMoney(chargingBillListVO.getPaymentAmount().subtract(chargingBillListVO.getRefundAmount()==null?BigDecimal.ZERO:chargingBillListVO.getRefundAmount() .subtract(commissionAmount).subtract(sharingAmount)) .subtract(chargingBillListVO.getCommissionAmount()==null?BigDecimal.ZERO:chargingBillListVO.getCommissionAmount()) .subtract(chargingBillListVO.getSharingAmount()==null?BigDecimal.ZERO:chargingBillListVO.getSharingAmount())); chargingBillListVO.setBillMoney(paymentAmount.subtract(refundAmount==null?BigDecimal.ZERO:refundAmount) .subtract(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN)).subtract(sharingAmount).setScale(2, BigDecimal.ROUND_DOWN)); switch (chargingBillListVO.getType()){ case 1: chargingBillListVO.setSiteName("全站"); @@ -330,6 +337,9 @@ chargingBillListVO.setChargingSecond(chargingSecond); } for (ChargingBillListVO chargingBillListVO : list1) { if (chargingBillListVO.getType()==2){ continue; } LocalDateTime billTime = chargingBillListVO.getBillTime(); // 将其转化为yyyy-MM格式字符串 chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); @@ -359,6 +369,7 @@ eq.eq("site_id", chargingBillListVO.getSiteId()); } List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq); tChargingOrders1.addAll(tChargingOrders); orderCount+=tChargingOrders.size(); chargingBillVO.setCategory(""); chargingBillVO.setExportList(tChargingOrders); @@ -379,6 +390,10 @@ .eq(TChargingOrderRefund::getRefundStatus, 2).list(); for (TChargingOrderRefund tChargingOrderRefund : list2) { refundAmountTotal =refundAmountTotal.add(tChargingOrderRefund.getRefundAmount()); tChargingOrder.setRefundAmount(tChargingOrderRefund.getRefundAmount()); tChargingOrder.setRefundContent(tChargingOrderRefund.getRefundReason()); tChargingOrder.setRefundCode(tChargingOrderRefund.getRefundCode()); tChargingOrder.setRefundTime1(DateUtils.localDateTimeToString(tChargingOrderRefund.getRefundTime())); } // 累加累计服务费 if (tChargingOrder.getServiceCharge()!=null){ @@ -386,7 +401,7 @@ } // 累加平台手续费 if (tChargingOrder.getOrderAmount()!=null){ commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006"))); commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))); } // 累加平台分佣 if (tChargingOrder.getSharingAmount()!=null){ @@ -407,16 +422,16 @@ } } chargingBillVO.setChargingCapacity(chargingCapacityTotal); chargingBillVO.setPaymentAmount(paymentAmountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setPaymentAmount(paymentAmountTotal); chargingBillVO.setOrderAmount(paymentAmountTotal.subtract(refundAmountTotal).subtract(commissionAmountTotal).subtract(sharingAmountTotal)); chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setElectrovalence(electrovalenceTotal); chargingBillVO.setServiceCharge(serviceChargeTotal); chargingBillVO.setOrderCount(orderCount); chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setCommissionAmount(commissionAmountTotal); chargingBillVO.setSharingAmount(sharingAmountTotal); chargingBillVO.setDiscount(discountTotal); chargingBillVO.setRefundAmount(refundAmountTotal); chargingBillVO.setExportList(tChargingOrders1); pageInfo.setRecords(list); chargingBillVO.setList(pageInfo); return chargingBillVO; @@ -631,7 +646,7 @@ } // 累加平台手续费 if (tChargingOrder.getOrderAmount()!=null){ commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006))); commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006))); } // 累加平台分佣 if (tChargingOrder.getSharingAmount()!=null){ @@ -650,12 +665,12 @@ String timeString = String.format("%d小时%d分钟%d秒", hours, minutes, seconds); chargingBillVO.setChargingTime(timeString); chargingBillListVO.setPaymentAmount(paymentAmount); chargingBillListVO.setPaymentAmount(orderAmount.subtract(commissionAmount).subtract(sharingAmount).setScale(2,BigDecimal.ROUND_DOWN)); chargingBillListVO.setOrderAmount(orderAmount); chargingBillListVO.setElectrovalence(electrovalence); chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,RoundingMode.HALF_DOWN)); chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,RoundingMode.HALF_DOWN)); chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,RoundingMode.HALF_DOWN)); chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,BigDecimal.ROUND_DOWN)); chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN)); chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,BigDecimal.ROUND_DOWN)); chargingBillListVO.setChargingCapacity(chargingCapacity); switch (chargingBillListVO.getType()){ case 1: @@ -742,8 +757,8 @@ } // 累加平台手续费 if (tChargingOrder.getOrderAmount()!=null){ commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006"))); commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006"))); commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))); commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))); } // 累加平台分佣 if (tChargingOrder.getSharingAmount()!=null){ @@ -765,14 +780,14 @@ } } chargingBillVO.setChargingCapacity(chargingCapacityTotal); chargingBillVO.setPaymentAmount(orderAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setPaymentAmount(orderAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, BigDecimal.ROUND_DOWN)); chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, BigDecimal.ROUND_DOWN)); chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, BigDecimal.ROUND_DOWN)); chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, BigDecimal.ROUND_DOWN)); chargingBillVO.setOrderCount(orderCount); chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setDiscount(discountTotal.setScale(2, RoundingMode.HALF_DOWN)); chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, BigDecimal.ROUND_DOWN)); chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, BigDecimal.ROUND_DOWN)); chargingBillVO.setDiscount(discountTotal.setScale(2, BigDecimal.ROUND_DOWN)); pageInfo.setRecords(list); chargingBillVO.setList(pageInfo); return chargingBillVO; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -284,9 +284,18 @@ if(null != dataList){ //在MongoDB中获取数据 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); List<String> time = dataList.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList()); List<BigDecimal> outputVoltage = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList()); List<BigDecimal> outputCurrent = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList()); List<UploadRealTimeMonitoringData> dataLists = new ArrayList<>(); String t = ""; for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : dataList) { if(!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)){ dataLists.add(uploadRealTimeMonitoringData); t = sdf.format(uploadRealTimeMonitoringData.getCreate_time()); } } List<String> time = dataLists.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList()); List<BigDecimal> outputVoltage = dataLists.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList()); List<BigDecimal> outputCurrent = dataLists.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList()); List<Map<String, Object>> currentAndVoltage = new ArrayList<>(); for (int i = 0; i < time.size(); i++) { Map<String, Object> map = new HashMap<>(); @@ -299,8 +308,8 @@ } myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage); //在MongoDB中获取数据 List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList()); List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList()); List<Integer> soc = dataLists.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList()); List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList()); List<Map<String, Object>> power = new ArrayList<>(); for (int i = 0; i < time.size(); i++) { Map<String, Object> map = new HashMap<>(); @@ -452,7 +461,6 @@ chargingOrder.setVipDiscountAmount(BigDecimal.ZERO); chargingOrder.setOrderSource(0); chargingOrder.setTitle("【充电桩充电】" + chargingPile.getNumber() + "号桩/" + tChargingGun.getCode() + "号枪"); chargingOrder.setStatus(1); Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0); Integer accountingStrategyId = tChargingGun.getAccountingStrategyId(); @@ -1290,9 +1298,9 @@ payOrderDto.setFinalAmount(payOrderDto.getOrderAmount()); } if (payOrderDto.getType()==1&&payOrderDto.getStatus()==3){ payOrderDto.setFinalAmount(payOrderDto.getRechargeAmount()); payOrderDto.setOrderAmount(payOrderDto.getRechargeAmount()); payOrderDto.setPaymentAmount(payOrderDto.getRechargeAmount()); payOrderDto.setFinalAmount(payOrderDto.getOrderAmount()); payOrderDto.setOrderAmount(payOrderDto.getOrderAmount()); payOrderDto.setPaymentAmount(payOrderDto.getOrderAmount()); } } pageInfo.setRecords(list); @@ -1404,7 +1412,7 @@ chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity()); BigDecimal bigDecimal = new BigDecimal("0.006"); if (chargingOrderListVO.getOrderAmount()!=null){ chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getOrderAmount().multiply(bigDecimal)); chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getPaymentAmount().multiply(bigDecimal)); } chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount()); chargingOrderListVO.setUid(chargingOrderListVO.getId()+""); @@ -1432,10 +1440,20 @@ // 获取开始SOC 结束soc if (chargingOrderListVO.getCode()!=null){ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData(); if (data6!=null && !data6.isEmpty()){ // 第一条数据soc为开始 最后一条数据soc为结束soc chargingOrderListVO.setEndSoc(data6.get(0).getSoc().toString()); chargingOrderListVO.setStartSoc(data6.get(data6.size()-1).getSoc().toString()); int min = 100; int max = 0; for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) { if (uploadRealTimeMonitoringData.getSoc()>max){ max = uploadRealTimeMonitoringData.getSoc(); } if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){ min = uploadRealTimeMonitoringData.getSoc(); } } chargingOrderListVO.setEndSoc(max+""); chargingOrderListVO.setStartSoc(min+""); } } @@ -1798,7 +1816,7 @@ //获取订单的计费策略 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"); @@ -2075,7 +2093,7 @@ if(null != integralRule){ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue(); Integer integral = chargingOrder.getServiceCharge().intValue() * num1; if(null != appUser.getVipId()){ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); @@ -2563,15 +2581,12 @@ if (tChargingOrder.getCouponDiscountAmount()!=null){ couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount()); } if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){ // 如果成功退款 那么减去退款金额 if (tChargingOrder.getPaymentAmount()!=null){ paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); }else{ if (tChargingOrder.getPaymentAmount()!=null){ paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); } } } // 三方交易手续费 三方收费*0.6% commissionAmount = sharingAmount.multiply(new BigDecimal("0.006")); // 订单手续费 订单支付金额 - 退款金额*0.6% @@ -2579,7 +2594,7 @@ tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setServiceCharge(serviceCharge.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setServiceCharge(serviceCharge.subtract(orderCommission).setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setOrderCommission(orderCommission); tSettlementConfirm.setVipDiscount(vipDiscount); tSettlementConfirm.setCouponDiscount(couponDiscount); @@ -2591,6 +2606,8 @@ tSettlementConfirm.setType(dto.getType()); if (dto.getState() == 2){ tSettlementConfirm.setServiceMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean()) .subtract(dto.getMaintain()).multiply(dto.getServicePartner())); tSettlementConfirm.setSupplyElectronic(dto.getSupplyElectronic()); tSettlementConfirm.setVenue(dto.getVenue()); tSettlementConfirm.setMetering(dto.getMetering()); @@ -2605,24 +2622,26 @@ tSettlementConfirm.setTotalService(dto.getTotalService()); tSettlementConfirm.setRemark(dto.getRemark()); tSettlementConfirm.setServicePartner(dto.getServicePartner()); tSettlementConfirm.setServiceMoney(dto.getServiceMoney()); BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner().multiply(new BigDecimal("0.01"))); BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner()); BigDecimal subtract9 = new BigDecimal("1").subtract(dto.getServicePartner()); // 总电损费用 BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN); // 平台承担电损 BigDecimal subtract1 = divide.subtract(tSettlementConfirm.getProportionMoney()); BigDecimal multiply = dto.getServiceMoney().multiply(subtract); BigDecimal subtract2 = multiply.subtract(subtract1); tSettlementConfirm.setNewMoney(subtract2); tSettlementConfirm.setNewMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean()) .subtract(dto.getMaintain()).multiply(subtract9).subtract(subtract1)); tSettlementConfirm.setTotalService(dto.getTotalService()); tSettlementConfirm.setServiceRemark(dto.getServiceRemark()); tSettlementConfirm.setDistribution(dto.getDistribution()); tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge())); tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getMetering())); tSettlementConfirm.setProfitMoney(chargingElectronic.add(serviceCharge).subtract(tSettlementConfirm.getCost())); tSettlementConfirm.setNewSettlement(subtract2.subtract(tSettlementConfirm.getCost())); tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getSupplyElectronic())); tSettlementConfirm.setProfitMoney(tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost())); tSettlementConfirm.setNewSettlement(tSettlementConfirm.getProfitMoney().add(tSettlementConfirm.getCost())); tSettlementConfirm.setServiceMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean()) .subtract(dto.getMaintain()).multiply(dto.getServicePartner())); tSettlementConfirmMapper.insert(tSettlementConfirm); } return tSettlementConfirm; @@ -2630,18 +2649,22 @@ @Override public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) { String startTime = null; String endTime = null; if (StringUtils.hasLength(dto.getStartTime())){ dto.setType(1); String[] split = dto.getStartTime().split(" - "); dto.setStartTime(split[0]); dto.setEndTime(split[1]); startTime = split[0]; endTime = split[1]; } if (StringUtils.hasLength(dto.getEndTime())){ dto.setType(2); String[] split = dto.getStartTime().split(" - "); dto.setStartTime(split[0]); dto.setEndTime(split[1]); String[] split = dto.getEndTime().split(" - "); startTime = split[0]; endTime = split[1]; } dto.setStartTime(startTime); dto.setEndTime(endTime); PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto); for (TSettlementConfirm tSettlementConfirm : list) { ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -933,7 +933,7 @@ from t_charging_order where 1=1 AND del_flag = 0 AND recharge_payment_status = 2 AND recharge_payment_status = 2 and status = 5 <if test="siteIds != null and siteIds.size() > 0"> and site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
@@ -10,9 +10,9 @@ </if> </select> <select id="settlementList" resultType="com.ruoyi.order.api.model.TSettlementConfirm"> select t1.* from t_settlement_confirm t1 where 1=1 select t1.* from t_settlement_confirm t1 where 1=1 <if test="req.partnerId != null "> and t1.partner_id = #{req.partnerId} </if> @@ -21,14 +21,14 @@ </if> <if test="req.type == 1 "> <if test="req.startTime != null and req.startTime!=''"> and (t1.start_time between #{req.startTime} and #{req.endTime} and (t1.start_time between #{req.startTime} and #{req.endTime}) </if> </if> <if test="req.type == 2 "> <if test="req.startTime != null and req.startTime!=''"> and (t1.end_time between #{req.startTime} and #{req.endTime} and (t1.end_time between #{req.startTime} and #{req.endTime}) </if> </if> and t1.del_flag = 0 and t1.del_flag = 0 </select> </mapper>